簡體   English   中英

使用LINQ查詢列表的最佳方法

[英]best way to use LINQ to query against a list

我有一個系列

IEnumerable<Project>

我想基於項目的Id屬性進行過濾,以包含列表中的任何ID:

List<int> Ids

執行where子句以檢查列表中是否包含屬性的最佳方法是什么。

var filteredProjectCollection = projectCollection.Where(p => Ids.Contains(p.id));

您可以使用Except方法獲得更高效的實現:

var specialProjects = Ids.Select(id => new Project(id));
var filtered = projects.Except(specialProjects, comparer); 

棘手的是, Except使用兩個相同類型的集合 - 所以你想擁有兩個項目集合。 您可以通過創建新的“虛擬”項目並使用comparer此操作,該比較comparer僅基於ID來比較項目。

或者,您可以僅在ID集合上使用Except ,但是您可能需要按ID查找項目,這使得此方法不那么吸引人。

var nonExcludedProjects = from p in allprojects where Ids.Contains(p => p.Id) select p;

如果你要使用.Where(p => list.Contains(p))答案中的一個,你應該首先從列表中創建一個HashSet,這樣它就不必做O(n)每次搜索。 這將運行時間從O(mn)減少到O(m + n)。

我不確定我理解你的問題,但我會有機會。

如果你有:IEnumerable可枚舉,並且你想要過濾它,使它只包含列表中也存在的項:List列表,那么:IEnumerable final = enumerable.Where(e => list.Contains(e));

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM