2010-01-15 108 views
2

我有兩個集合,需要從兩個集合中創建一個新的集合。Linq查詢幫助

假設下面的類:

public class Widget 
{ 
    property int Id{get;set;} 
    property string Label{get;set;} 
} 

我們有兩個IList的類。我想創建一個匿名類型與標識,標籤,並存

所以做這個ID和標籤,我有:

var newCol=from w in widgets 
      select new {Id=w.Id,Label=w.Label,Exists=????} 

有Linq中的一種方法,我可以判斷存在不寫在這裏循環代碼?

編輯

已存在告訴我們,如果Widget是在第二個列表。因此,例如我想到的一個解決方案是:

var newCol=from w in widgets 
      select new {Id=w.Id,Label=w.Label,Exists=myWidgets.Contains(w)} 

我的部件是第二個IList。

+1

我們需要更多的信息。其他IList是什麼?存在意味着什麼?你的意思是你想檢查這個小部件是否存在於另一個IList中? – 2010-01-15 20:18:41

+0

是的,所以我們基本上做一個左連接btw兩個列表,我想知道什麼時候該項目在兩個列表中。 – JoshBerke 2010-01-15 20:23:48

回答

1

你也可以做到這一點使用GroupJoin

var newCol = widgets.GroupJoin(
    otherWidgets, 
    w => w.Id, 
    w => w.Id, 
    (w, joined) => new { Id = w.Id, Label = w.Label, Exists = joined.Any() }); 
3

你的問題實在是模糊的,但我猜這是你想要的東西:

var newCol = from w in widgets 
      select new { Id = w.Id, Label = w.Label, 
       Exists = others.Contains(o => o.Id == w.Id } 
+0

不錯!!!!!!!!!!!!!!!! – 2010-01-15 20:21:29

+0

是的,我很抱歉模糊不清,很難明確。 – JoshBerke 2010-01-15 20:22:41

+0

擊敗了我。我不得不努力去理解他在問什麼。雖然我不會在包含方法中使用Lambda,但是我認爲這只是'Contains(w)' – 2010-01-15 20:24:33