我填充List<Object1>
对象1包含2个字段(int id&amp; string name)
我也有IEnumerable<Object2>
由linq2sql生成。使用字段(id,name)
我需要List<Object1>
中IEnumerable<Object2>
的 ID 中的项目不在IEnumerable Object2
List<Object1> excepted = Object2.Where(t => obj1.Contains == t.Id);
。
通过关键字段= ID
(比如sql中的位置..)
我使用了像
这样的代码{{1}}
谢谢!
答案 0 :(得分:5)
怎么样:
HashSet<string> knownIds = new HashSet<string>(list2.Select(x => x.Id));
var exceptions = list1.Where(x => !knownIds.Contains(x.Id));
正如Earwicker正确地说的那样,这只会给IEnumerable<Object1>
- 如果你需要一个列表,请将第二行更改为:
var exceptions = list1.Where(x => !knownIds.Contains(x.Id)).ToList();
答案 1 :(得分:2)
您可以通过以下方式实现此目的。
var excepted = objects1.Where(o1 => !objects2.Select(o2 => o2.Id).Contains(o1.Id));
最好的问候
答案 2 :(得分:2)
我很惊讶没有人建议加入:
var excepted = (from o1 in List1
join o2 in List2
on o1.Id equals o2.Id into j
where !j.Any() // j is empty
select o1
).ToList();
可能略低于Jon的HashSet解决方案,但查询语法很有趣。
答案 3 :(得分:0)
继Jon Skeet的回答之后,您需要在表达式末尾使用ToList()
扩展方法,将其转换为List。