2010-08-23 21 views
3

WHERE子句比方說,我有這兩個表:與需要幫助的LINQ到SQL對外國表

ParentDataItem 
    ParentDataItemID 
    ...some other fields... 

ChildDataItem 
    ChildDataItemID 
    ParentDataItemID (foreign key) 
    Name 
    Value 

現在我要選擇有ChildDataItem具有指定名稱和值的任何ParentDataItems。

我知道我的方式把我的第一種方法,這是這樣的:

// db is the data context object 
db.ParentDataItems.Where(p => p.ChildDataItems.Where(c => c.Name == "XXX" && c.Value == "XXX")); 

我寧願lambda語法,但無論是會做。

回答

3

如果已經有它們之間的關係(因爲你在設計,例如設置一個),你就應該能夠做到:

var foo = db.ParentDataItems.Where(p => p.ChildDataItems.Any(c => c.Name == "value"); 

這將讓有任何與兒童有關的任何父數據項與「值」匹配的名稱。

如果沒有,你就必須手動在一起(這看起來更可怕的一點在lambda語法)連接兩個表:

var foo = db.ParentDataItems.Join(db.ChildDataItems.Where(c => c.Name == "value"), 
            p => p.ChildDataItemId, 
            c => c.ParentDataItemId, 
            (parent, child) => parent); 
3

使用LINQ語法:

var foo = from p in ctx.Parent 
      join c in ctx.Children on c.ParentDataItemID equals p.ParentDataItemID 
      where c.Name = "Foo" 
      select p; 

我建議LINQPad用於創作和學習LINQ查詢。

+0

感謝您的鏈接到LINQPad - 其實我也它的一個安裝我的機器 - 我想我可以開始使用它了。 – jhorback 2010-08-23 19:41:30