最終結果是我想用.Where(t => someIntList.Contains(t.ID)).ToList()
。我正在努力創造someIntList
。從列表<T>返回具有整數屬性的列表<int>?
我到目前爲止:List<Person> people = people.Where(p => p.isActive).ToList()
。如何返回p.ID
屬性的List<int>
?
或者有另一種方式做包含(不寫,因爲我已經有了用於其他目的一個比較器類
最終結果是我想用.Where(t => someIntList.Contains(t.ID)).ToList()
。我正在努力創造someIntList
。從列表<T>返回具有整數屬性的列表<int>?
我到目前爲止:List<Person> people = people.Where(p => p.isActive).ToList()
。如何返回p.ID
屬性的List<int>
?
或者有另一種方式做包含(不寫,因爲我已經有了用於其他目的一個比較器類
好,生產List<int>
容易,使用Select
進行投影。
List<int> activeIds = people.Where(p => p.IsActive)
.Select(p => p.ID)
.ToList();
然而,而不是做的,然後用Contains
,我將執行聯接:
var activePeople = people.Where(p => p.IsActive);
var query = from person in otherList
join activePeople on person.ID equals activePeople.ID
select person;
或者創建HashSet<int>
代替List<int>
,使Contains
檢查更加高效:
var activeIds = new HashSet<int>(people.Where(p => p.IsActive)
.Select(p => p.ID));
var query = otherList.Where(t => activeIds.Contains(t.ID))
.ToList();
這兩種會給O(M + N)的複雜查找所有比賽,而不是O(M * N)是構建一個清單,然後使用即爲Contains
檢查會做什麼。
當然,假設Contains
檢查將在進程中完成。如果這是實際上打算在LINQ中使用到SQL查詢,然後將其可能是傳遞一個List<int>
是好的 - 或者可能是聯接允許你做這一切在數據庫中。我們真的需要更多的背景給你很好的建議 - 但不要只是停止在「這是我如何建立一個List<T>
,因此我完成了。」
謝謝,給我一些想法。代碼比我試圖簡單的例子更復雜。 – Marcus
@IgorK:您可以提供的信息越多,我們的答案就越有用。我們不能*真的*告訴你是否需要一個'List',或者這是否正是你最初想到的。 –
你能解釋一下如何創建HashSet?我不明白你怎麼能傳遞一個IENumerable作爲參數? –
Marcus