如何在linq上进行内部联接 [英] How do I make inner join on linq

查看:78
本文介绍了如何在linq上进行内部联接的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我必须首先尝试开发,以便我需要在数据库中的两个表之间进行内部连接。



这样我必须从venner.from检索信息。有一个brugere.id同时我发现venner.godkendt是0



需要检索用户表的名称和img。 />


我试图用两种不同的方式制作它。



 var innerjoin =来自db.venners中的VenA 
加入BrugereA in db.brugeres on VenA.From等于BrugereA.Id



我最好在这里(我可以像我这样做的任何地方)



 var innerjoin = db.venners.GroupBy(venid => venid.To == id&& venid.Godkendt == 0); 



我试图让它变得简单sql



选择brugere.name,brugere.img来自venner 
INNER JOIN brugere on brugere.id = venner.from WHERE venner.godkendt == 0





EIDT HER





 var innerjoin =来自db.venners的VenA 
加入BrugereA in db.brugeres on VenA.From等于BrugereA.Id
其中VenA.godkendt == 0
选择BrugereA;

RepeaterVenGodkendt.DataSource = innerjoin;
RepeaterVenGodkendt.DataBind();





错误 godkendt == 0



 CREATE TABLE [dbo]。[brugere](
[Id] INT IDENTITY(1,1)NOT NULL,
[brugernavn] NVARCHAR(255)NOT NULL,
[adgangskode] NVARCHAR(255)NOT NULL,
[fornavn] NVARCHAR(200)NOT NULL,
[efternavn] NVARCHAR(200 )NOT NULL,
[rank] INT NOT NULL,
[img] NVARCHAR(255)NULL,
[opretdate] DATETIME NOT NULL,
[point] INT NOT NULL,
[profiltekst] NTEXT NULL,
[nyhedsbrev] INT NOT NULL,
[trydato] DATETIME NULL,
[abonnementsid] INT NULL,
[prisid] INT NULL ,
[opsagt] INT NOT NULL,
[trytried] INT NULL,
CONSTRAINT [PK_brug ere] PRIMARY KEY CLUSTERED([Id] ASC)
);

CREATE TABLE [dbo]。[venner](
[Id] INT IDENTITY(1,1)NOT NULL,
[From] INT NOT NULL,
[To] INT NOT NULL,
[DatoTid] DATETIME NOT NULL,
[Godkendt] INT DEFAULT((0))NOT NULL,
CONSTRAINT [PK_Venner] PRIMARY KEY CLUSTERED([Id] ASC),
CONSTRAINT [FK_Venner_ToBrugereFrom] FOREIGN KEY([From])REFERENCES [dbo]。[brugere]([Id]),
CONSTRAINT [FK_Venner_ToBrugereTo] FOREIGN KEY([To])REFERENCES [dbo] ]。[brugere]([Id])
);

解决方案

你的第二个代码不是连接,它是分组:)



我明白你更喜欢Linq解决方案吗?我想这就是你想要的:

  var  innerjoin = 来自 VenA   db.venners 
join BrugereA db.brugeres中的code-keyword>等于BrugereA.Id
其中​​ VenA.godkendt == 0
选择 new {BrugereA.name, BrugereA.img};



然后你可以像这样迭代结果:

  foreach  var  item  in  innerjoin)
{
var name = item.name; // 我在这里使用var,因为我不知道
var img = item.img; // 实际类型的名称和img

// 使用name和img做一些事情
}





或者你可以不用匿名类型,只选择BrugereA,如下:

  var  innerjoin = 来自 VenA   db.venners 
加入 BrugereA db.brugeres on VenA.From上等于BrugereA.Id
其中 VenA.godkendt == 0
选择 BrugereA;


I must first try to develop such that I need inner join between two tables in the database.

It is such that I must retrieve information from venner.from which has brugere.id to be the same time I find out if venner.godkendt is 0

the need to retrieve the name and img of the user table.

I have tried to make it in two different kinds of ways.

var innerjoin = from VenA in db.venners
                        join BrugereA in db.brugeres on VenA.From equals BrugereA.Id


I can best li it here (I can be anywhere like that I made it this way)

var innerjoin = db.venners.GroupBy(venid => venid.To == id && venid.Godkendt == 0);


I have tried to make it plain sql

select brugere.name, brugere.img from venner
INNER JOIN brugere on brugere.id = venner.from WHERE venner.godkendt == 0



EIDT HER


var innerjoin = from VenA in db.venners
                join BrugereA in db.brugeres on VenA.From equals BrugereA.Id
                where VenA.godkendt == 0
                select BrugereA;

        RepeaterVenGodkendt.DataSource = innerjoin;
        RepeaterVenGodkendt.DataBind();



are error on godkendt == 0

CREATE TABLE [dbo].[brugere] (
    [Id]            INT            IDENTITY (1, 1) NOT NULL,
    [brugernavn]    NVARCHAR (255) NOT NULL,
    [adgangskode]   NVARCHAR (255) NOT NULL,
    [fornavn]       NVARCHAR (200) NOT NULL,
    [efternavn]     NVARCHAR (200) NOT NULL,
    [rank]          INT            NOT NULL,
    [img]           NVARCHAR (255) NULL,
    [opretdate]     DATETIME       NOT NULL,
    [point]         INT            NOT NULL,
    [profiltekst]   NTEXT          NULL,
    [nyhedsbrev]    INT            NOT NULL,
    [trydato]       DATETIME       NULL,
    [abonnementsid] INT            NULL,
    [prisid]        INT            NULL,
    [opsagt]        INT            NOT NULL,
    [trytried]      INT            NULL,
    CONSTRAINT [PK_brugere] PRIMARY KEY CLUSTERED ([Id] ASC)
);

CREATE TABLE [dbo].[venner] (
    [Id]       INT      IDENTITY (1, 1) NOT NULL,
    [From]     INT      NOT NULL,
    [To]       INT      NOT NULL,
    [DatoTid]  DATETIME NOT NULL,
    [Godkendt] INT      DEFAULT ((0)) NOT NULL,
    CONSTRAINT [PK_Venner] PRIMARY KEY CLUSTERED ([Id] ASC),
    CONSTRAINT [FK_Venner_ToBrugereFrom] FOREIGN KEY ([From]) REFERENCES [dbo].[brugere] ([Id]),
    CONSTRAINT [FK_Venner_ToBrugereTo] FOREIGN KEY ([To]) REFERENCES [dbo].[brugere] ([Id])
);

解决方案

Your second code isn't a join, it's a grouping :)

I understand you would prefer the Linq-solution? I think this would be what you want:

var innerjoin = from VenA in db.venners
                join BrugereA in db.brugeres on VenA.From equals BrugereA.Id
                where VenA.godkendt == 0
                select new { BrugereA.name, BrugereA.img };


And then you can iterate over the results like so:

foreach (var item in innerjoin)
{
    var name = item.name;  // I used "var" here because I don't know the
    var img = item.img;    // actual types of name and img

    // do something with name and img here
}



Alternatively you can do without the anonymous type and just select BrugereA, like so:

var innerjoin = from VenA in db.venners
                join BrugereA in db.brugeres on VenA.From equals BrugereA.Id
                where VenA.godkendt == 0
                select BrugereA;


这篇关于如何在linq上进行内部联接的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆