在LINQ中如何找到连接2个表的不同项?

时间:2008-10-16 20:31:57

标签: .net linq

鉴于下表。如果LINQ中的其他ID为76,我如何获得Distinct名称?

**Table S**
SID   OtherID
------------------------------
1     77
2     76


**Table Q**
QID   SID  HighLevelNAme      LoweLevelName
---------------------------------------
10     1       Name1              Engine
11     1       Name1              SparkPlus
12     1       Name2              Seat
13     1       Name2              Belt
14     1       Name1              Oil

我想返回

列表

名1   NAME2

执行此操作的SQL是

SELECT DISTINCT
    Q.HighLevelNAme
FROM S
JOIN Q ON Q.SID = S.SID
WHERE
        S.OtherID = 76

我还有代表每个表的对象。

VB或C#中的答案是可以接受的。

2 个答案:

答案 0 :(得分:7)

如果您在数据库中定义了外键关系,并通过设计器生成LINQ类,那么连接应该在对象模型中表示,对吧?所以每个QItem都有一个属性SItem?如果没有,我猜你可以使用该部分的Join扩展方法。

无论如何,我没有测试过这个IRL,但它不会只是这个吗?

var results = (from QItem in dataContext.QItems
                where QItem.SItem.OtherID == 76
                select QItem.HighLevelName).Distinct();

答案 1 :(得分:2)

使用Troy的答案,这种查询方法也有效。

List<string> highLevelNames = dataContext
  .Q
  .Where<Q>(item => item.S.OtherID == id)
  .Select<Q, string>(item => item.HighLevelNAme)
  .Distinct()
  .ToList<string>();