从另一个中减去通用列表

时间:2013-09-19 13:18:12

标签: c# linq

我正在尝试从一个列表中删除另一个列表中的firmID。 我真的不懂linq,但我很确定我需要使用它。

List<Firm> firms = GetBusinessDevelopmentFirms(database);
List<Firm> trackedFirms = GetAllCLIFirmsBeingTrackedByUser();

var result = firms.Contains(i => trackedFirms.Contains(i.FirmID));

最后一行不起作用,系统说“未知方法包含(?)”即使我已经“使用System.Linq;”在班级的顶端。

我的想法是从所有公司的名单中删除跟踪公司列表,以找到未跟踪的公司。

我希望这是有道理的。

6 个答案:

答案 0 :(得分:91)

var result = firms.Except(trackedFirms); // returns all the firms except those in trackedFirms

答案 1 :(得分:9)

从上面的代码中,我假设您正在尝试从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();

答案 2 :(得分:4)

我认为这应该有效

var result = firms.Where(x => !trackedFirms.Any(y => x.FirmID == y.FirmID));

firms中的所有公司选择trackedFirms的公司(至少这是我从您的问题中理解的)。

答案 3 :(得分:3)

ContainsList<T>的原生方法,希望您传入T。您想要Where

var result = firms.Where(i => trackedFirms.Contains(i.FirmID));

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

答案 4 :(得分:1)

对于您而言,最好的方法是 var $container = rule.$el.find('.rule-value-container'); var html = `<input class="form-control" type="number" name="${ name }_0" step="any" min="0">`; console.log($(html)); $(html).on('change', function(e) { console.log('test', e); }) $container.html(''); $container.append(html); } 。但是,如果List对象不同于其他对象,则可以使用Except()

All()

答案 5 :(得分:0)

如果你有列表X和列表Y,并且你想删除Y中X中的所有项目,你可以试验以下内容:

X.Intersect(Y)

Comparing two Lists and returning the distinct values and the differences