Linq选择Item,它在另一个表中等于ID

时间:2014-08-18 18:44:33

标签: c# sql sql-server linq

我不确定这有多可能,但我有两个表,我想通过表1的值从表2中获取一个值。

表1中有一个名为“rank”的外键,它是int。表2有一个名为“name”的值,它是string。现在表1的“等级”与表2的“ID”相关。

所以当我说

var result = db.Table1.Select(x => new { x.name, x.rank }).ToList(); //Bob - 2

我真的想说点什么

var result = db.Table1.Select(x => new { x.name, Table2.rank.Where(ID == x.rank) }).ToList(); //Bob - Gold

我仍然是LINQ的新手,我不知道如何在这样的查询中从另一个表中获取rank的字符串值。

修改

我正在使用的表及其关系值。

用户:ID(PK),s1elo(FK到PastElos),冠军(FK到ChampionList),elo(FK到EloList)

PastElo:ID(PK),Rank

ChampionList:ID(PK),名称

EloList:ID(PK),Rank

用户和PastElo的工作示例

var result = db.Users.Join(db.PastEloes, x => x.s1elo, y => y.ID, (x, y) => new { y.Rank, x.name, x.other_items_in_Users }).ToList();

注意:PastElo是PastEloe,因为当我同步我的数据库时,EF会使所有内容复数化,因此为什么User也是用户,我认为这被称为“上下文”。

2 个答案:

答案 0 :(得分:8)

您可以尝试以下内容:

var result = db.Table1.Join(db.Table2, 
                            x=>x.rank, 
                            y=>y.ID, 
                           (x,y) => new { x.rank, y.Name }).ToList();

在上面的linq查询中,我们根据关联在两个表JoinTable1之间建立Table2,然后我们选择我们想要的。

您可以尝试编写此查询的另一种方法如下:

var result = (from t1 in db.Table1
             join t2 in db.Table2
             on t1.rank equals t2.ID
             select new { t1.rank, t2.Name, }).ToList();

答案 1 :(得分:0)

执行此操作的另一种方法是将数据库关系包含在C#实体中。您可以在此处使用EntityRef。请参阅以下文档:

https://docs.microsoft.com/en-us/dotnet/framework/data/adonet/sql/linq/how-to-map-database-relationships