![](/img/trans.png)
[英]Best method for turning a bool list to a linq query against string values
[英]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.