我正在尝试从一个列表中删除另一个列表中的firmID。 我真的不懂linq,但我很确定我需要使用它。
List<Firm> firms = GetBusinessDevelopmentFirms(database);
List<Firm> trackedFirms = GetAllCLIFirmsBeingTrackedByUser();
var result = firms.Contains(i => trackedFirms.Contains(i.FirmID));
最后一行不起作用,系统说“未知方法包含(?)”即使我已经“使用System.Linq;”在班级的顶端。
我的想法是从所有公司的名单中删除跟踪公司列表,以找到未跟踪的公司。
我希望这是有道理的。
答案 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)
Contains
是List<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