繁体   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