c# - 加快性能 - LINQ 获取一个列表中不在另一个列表中的项目

标签 c# linq

我有两个列表,我试图返回不在另一个列表中的项目。这是我的代码:

var Results = ListOne.Where(x => ListTwo.All(a => a.EmployeeNum != x.EmployeeNum && a.Sched != x.Sched));

这大约需要 9-10 秒才能完成。 ListOne 大约有 1200 条记录,ListTwo 大约有 33000 条记录。

最佳答案

使用 HashSet<T> , 因为它有 O(1)搜索时间可以提高性能,例如

var hashSet = new HashSet<T>(ListTwo.Select(x => Tuple.Create(x.EmployeeNum, x.Sched)));
var results = ListOne.Where(x => !hashSet.Contains(Tuple.Create(x.EmployeeNum, x.Sched)));

关于c# - 加快性能 - LINQ 获取一个列表中不在另一个列表中的项目,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55504000/

相关文章:

c# - 在 LINQ 中将字符串转换为 Int

c# - 为什么在将 First() 应用于投影时此 linq 代码会呈指数级变慢?

c# - 显示 .txt 文件中的随机行 - C#

c# - 在 gridview - ASP.Net 中显示每页的行数结果

c# - 在列表对象中排序

c# - 如何使用 LINQ to XML 将新元素添加到 Windows Phone 7 上的现有 XML 文件?

.net - 使用 Linqdatasource 和 groupby 属性

c# - Entity Framework 6 渴望加载具有许多子项和子项的大对象

c# - 使用自定义值格式将 gridview 导出到 excel

c# - 运行 NUnit 测试时配置文件错误 (TD.NET)