从另一个泛型列表中减去泛型列表

本文关键字:泛型 列表 另一个 | 更新日期: 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));

如果希望resultList<T>,请将.ToList()添加到Where LINQ 表达式的末尾。

如果您有列表 X 和一个列表 Y,并且想要删除 Y 中 X 中的所有项目,则可以尝试以下方法:

十、相交(Y)

比较两个列表并返回不同的值和差异