【问题标题】:Linq select Item where it is equal to ID in another tableLinq select Item等于另一个表中的ID
【发布时间】:2014-08-18 18:44:33
【问题描述】:

我不确定这怎么可能,但我有两个表,我想通过表 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)、champ(FK 到 ChampionList)、elo(FK 到 EloList)

PastElo:ID (PK)、排名

ChampionList:ID(PK)、名称

EloList:ID(PK)、排名

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 的,因为当我同步我的数据库时,EF 将所有内容都设为复数,因此为什么用户也是用户,我认为这被称为“上下文”。

【问题讨论】:

    标签: c# sql sql-server linq


    【解决方案1】:

    您可以尝试以下方法:

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

    在上面的 linq 查询中,我们根据关联在两个表 Table1 和 Table2 之间创建一个 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();
    

    【讨论】:

    • 有趣!我要试一试!顺便说一句,是否可以加入多个表?理论上,我实际上参考了 3 个不同的表来获取一些单独存储的辅助信息,以实现更松散的数据耦合。那么可以加入多个表吗?
    • 是的,有可能。如果您可以发布您的表格示例,我可以提供帮助。
    • @Austin,请问您究竟想在第一篇文章中从表格中选择哪些值?
    • 当然我会发布我从你的例子中得到的工作,一秒钟
    • 奥斯汀请给我几个小时,我会回来的。感谢您的耐心等待!
    【解决方案2】:

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

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

    【讨论】:

      猜你喜欢
      • 2023-03-06
      • 1970-01-01
      • 1970-01-01
      • 2013-09-27
      • 2017-01-15
      • 1970-01-01
      • 2016-11-09
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多