从另一个泛型列表中减去泛型列表
本文关键字:泛型 列表 另一个 | 更新日期: 2023-09-27 18:31:54
我正在尝试从一个列表中删除另一个 firmID 列表。我不太了解linq,但我很确定我需要使用它。
List<Firm> firms = GetBusinessDevelopmentFirms(database);
List<Firm> trackedFirms = GetAllCLIFirmsBeingTrackedByUser();
var result = firms.Contains(i => trackedFirms.Contains(i.FirmID));
最后一行不起作用,系统显示"未知方法包含(?)",即使我输入了"使用 System.Linq;"在班级中名列前茅。
我的想法是从所有公司列表中删除被跟踪公司的列表,以找到未跟踪的公司。
我希望这是有道理的。
var result = firms.Except(trackedFirms); // returns all the firms except those in trackedFirms
从上面的代码中,我假设您正在尝试从在跟踪公司中具有相应项目的公司获取条目。
List<Firm> results = Firms.Where(f => TrackedFirms.Any(t => t.FirmId == f.FirmId)).ToList();
另一方面,如果您想要未跟踪的公司,那么它是:
List<Firm> results = Firms.Where(f => !TrackedFirms.Any(t => t.FirmId == f.FirmId)).ToList();
我认为这应该有效
var result = firms.Where(x => !trackedFirms.Any(y => x.FirmID == y.FirmID));
从firms
的所有公司中选择不在trackedFirms
中的公司(至少这是我从你的问题中理解的)。
最好的方法是Except()
您的情况。但是,如果 List 对象与另一个对象不同,则可以使用 All()
firms.Where(x=> trackedFirms.All(y => y.FirmId != x.FirmId)
Contains
是希望您传入T
的本机List<T>
方法。 你想要Where
。
var result = firms.Where(i => trackedFirms.Contains(i.FirmID));
如果希望result
是List<T>
,请将.ToList()
添加到Where
LINQ 表达式的末尾。
如果您有列表 X 和一个列表 Y,并且想要删除 Y 中 X 中的所有项目,则可以尝试以下方法:
十、相交(Y)
比较两个列表并返回不同的值和差异