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

本文关键字:另一个 ID 选择 Item Linq | 更新日期: 2023-09-27 18:18:37

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

表1有一个名为"rank"的外键,它是一个int。表2有一个名为"name"的值,它是一个string。现在表1的"rank"与表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的字符串值这样的查询。

编辑

我正在使用的表和它们的关系值

User: ID (PK), s1elo (FK到PastElos), champ (FK到ChampionList), elo (FK到EloList)

PastElo: ID (PK), Rank

ChampionList: ID (PK), name

EloList: ID (PK), Rank

Users和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的,因为当我同步我的DB时,EF使一切都变成了复数,因此为什么用户也是用户,我认为这被称为"上下文"。

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

您可以尝试如下操作:

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

在上面的linq查询中,我们在两个表Table1Table2之间建立了一个基于关联的Join,然后我们选择我们想要的。

另一种方法是:

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();

另一种方法是在c#实体中包含数据库关系。你可以使用EntityRef。请参阅以下文档:

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