是否有Linq操作来确定集合中是否存在具有相同属性值的项目?

Cor*_*ker 2 c# linq anonymous-types composite-key

C#:我有一组对象.T有2个属性.属性A和属性B.此集合需要遵守的规则是A和B的值组合在集合中必须是唯一的.换句话说,A和B需要用作复合主键.

在Linq有一个操作我可以用来检查这种情况吗?我希望它会像

if (items.Select(x => x.Name).Distinct().Count() != items.Select(x => x.Name).Count())
Run Code Online (Sandbox Code Playgroud)

上面的陈述是我如何检查集合中是否有重复名称的项目,但我不知道如何为多个属性执行此操作.

Jon*_*eet 12

使用匿名类型选择复合键,例如

int totalCount = items.Count();
int distinctCount = items.Select(x => new { x.Name, x.Other })
                         .Distinct()
                         .Count();
Run Code Online (Sandbox Code Playgroud)

匿名类型根据其属性(以及这些属性类型的默认相等比较器)自动实现相等和哈希码.