我如何使用第二個表達式來選擇只有那些ID從第一個?lambda擴展來組合列表
var list1= from x in objects select x.id;
results=results.Where(r=>r.id== ???? )
我想要的結果是隻有那些ID從listA的
TIA
編輯:我站在糾正,還有一個問題引起的問題,我會詢問分開。
我如何使用第二個表達式來選擇只有那些ID從第一個?lambda擴展來組合列表
var list1= from x in objects select x.id;
results=results.Where(r=>r.id== ???? )
我想要的結果是隻有那些ID從listA的
TIA
編輯:我站在糾正,還有一個問題引起的問題,我會詢問分開。
猜測的位(沒試過運行的話),但是:
var filteredResults = from obj in objects
join result in results on obj.id equals result.id
select result;
請注意,這應該代替你在你的問題中的代碼行。
results = results.Where(r => list1.Contains(r.id));
如果你想要一些性能(list.Contains()有一個O(n)的複雜性),你可以用
var ids = objects.ToDictionary(o => o.id);
results.Where(o => ids.ContainsKey(o.id));
這給了一個錯誤。這應該與linqtosql一起工作? – zsharp 2009-06-04 20:54:35
呃,沒有這是Linq只有對象。如果你希望它在SQL中通過lin翻譯成sql,你應該在問題中(和標籤中)指定它。 此外,如果您說出了確切的錯誤,那將會很有幫助。 – 2009-06-04 20:58:17
也許去你想要這個嗎?
results.Where(R => objects.Any(O => o.id == r.id))
如果你總是隻需要第一個元素的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 )
這也適用,但我想知道哪一種效率更高? – zsharp 2009-06-04 20:53:44