2010-05-24 218 views
0

我有一個關於使用Linq在C#中從多個表中進行選擇的問題。Linq to Sql從多個表中選擇

表結構是這樣的:

表A
TableAID column1的 列2

表B
TableBID TableAID欄3 Column4

所以在代碼我有:

List<string> myList = new List{"Test1","Test2"}; 
var myView = MYDC.TableA.AsQueryAble(); 

如果我想用其中的列1,選擇從表中A記錄,我會簡單地使用:

myView = myView.Where(k=>myList.Contains(k.Column1)); 

但是,如果我想保留MyView的如表A的可查詢,如果我想在欄3對錶B的地方使用,它通過外鍵鏈接到TableA,我該怎麼做?

我嘗試沒有成功如下:

myView = myView.Where(k=>myList.Contains(k.TableB.Select(kk=>kk.Column3))); 

有什麼建議?

在此先感謝

+0

這是什麼意思「沒有成功」?當你嘗試時發生了什麼? – svick 2010-05-24 14:47:55

+0

它說: 委託'System.Func '不需要1個參數 – Lexicon 2010-05-24 14:55:08

+0

我會指出,當你看到一個'Func'(vs'Expression >')一個可查詢的語句,通常意味着它運行謂詞_in內存_而不是翻譯成數據庫調用,所以它通常會否定可查詢的好處(因爲您要返回整個記錄集才能執行謂詞)。 – drzaus 2013-10-15 15:09:11

回答

0

有幾種方法可以做到這一點。這裏有兩個:

var q = (
    from b in MYDB.TableB 
    where myList.Contains(b.Column3) 
    select b.TableA).Distinct(); 

var q = 
    from a in myView 
    let bs = a.TableB.Where(b => myList.Contains(b.Column3)) 
    where bs.Any() 
    select a; 

我希望這有助於。

+0

謝謝,但我知道如何使用正常的linq查詢來做到這一點。但是如何使用謂詞? – Lexicon 2010-05-24 17:14:05