2009-06-03 36 views
0

我如何使用第二個表達式來選擇只有那些ID從第一個?lambda擴展來組合列表

var list1= from x in objects select x.id; 


results=results.Where(r=>r.id== ???? ) 

我想要的結果是隻有那些ID從listA的

TIA

編輯:我站在糾正,還有一個問題引起的問題,我會詢問分開。

回答

4

猜測的位(沒試過運行的話),但是:

var filteredResults = from obj in objects 
         join result in results on obj.id equals result.id 
         select result; 

請注意,這應該代替你在你的問題中的代碼行。

+0

這也適用,但我想知道哪一種效率更高? – zsharp 2009-06-04 20:53:44

4

是這樣的...

results.Where(r=>list1.Contains(r.id)) 
+0

可能會非常棘手,如果list1和結果包含很多項目... – 2009-06-03 01:03:38

+0

沒有工作見上述 – zsharp 2009-06-03 01:08:06

+0

我堅持認爲這是解決您所描述的問題 – spender 2009-06-03 08:41:12

4
results = results.Where(r => list1.Contains(r.id)); 
+0

沒有工作見上面 – zsharp 2009-06-03 01:08:19

+0

你是什麼意思沒有工作?你有例外嗎?這正是它應該如何工作;如果list1是一個int列表,它會在結果中檢查對象的int屬性以查看它們是否存在於列表中。我只是用一些虛擬類在我的機器上測試過它,它運行得很完美。發佈無論是錯誤還是更多的代碼... – BFree 2009-06-03 01:11:53

+0

我站在糾正,有另一個問題導致問題,我會問關於分開。 – zsharp 2009-06-04 20:41:46

2

如果你想要一些性能(list.Contains()有一個O(n)的複雜性),你可以用

var ids = objects.ToDictionary(o => o.id); 

results.Where(o => ids.ContainsKey(o.id)); 
+0

這給了一個錯誤。這應該與linqtosql一起工作? – zsharp 2009-06-04 20:54:35

+0

呃,沒有這是Linq只有對象。如果你希望它在SQL中通過lin翻譯成sql,你應該在問題中(和標籤中)指定它。 此外,如果您說出了確切的錯誤,那將會很有幫助。 – 2009-06-04 20:58:17

0

也許去你想要這個嗎?

results.Where(R => objects.Any(O => o.id == r.id))

0

如果你總是隻需要第一個元素的ID,你可以將其存儲到變量,用它來lambda表達式

var results= from x in objects select x.id; 
int firstID = results.First().id ; 
results=results.Where(r=>r.id== firstID ) 

或者,直接使用這樣的:

var results= from x in objects select x.id; 
results=results.Where(r=>r.id== results.First().id )