2008-10-16 26 views
2

鑑於下表。在LINQ中,如何獲得76的另一個ID?在LINQ中如何找到連接2個表的不同項目?

**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 名稱2

的SQL列表來做到這一點是

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

我也有,表示每個表的對象。

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

回答

6

如果你有數據庫中定義的外鍵關係,並通過設計器生成LINQ類,那麼連接應該在對象模型中表示,對吧?所以每個QItem都有一個屬性SItem?如果沒有,我想你可以使用該部分的Join擴展方法。

無論如何,我沒有測試這個IRL,但是它不是僅僅是這個嗎?

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

This works。我不知道我是如何錯過這一點的。這正如我所模擬的那樣。 非常感謝。 – 2008-10-16 20:44:09

2

使用Troy的答案,這種查詢方法也適用。

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

這是「查詢方法」,而不是「Linq to Objects」。您不在查詢內存中的對象集合。 – 2008-10-17 13:04:01

相關問題