是否有Linq操作来确定集合中是否存在具有相同属性值的项目?
-
06-07-2019 - |
题
C#:我有一组对象。 T有2个属性。属性A和属性B.此集合需要遵守的规则是A和B的值组合在集合中必须是唯一的。换句话说,A和B需要作为复合主键。
Linq中是否有可以用来检查这种情况的操作?我希望它像
if (items.Select(x => x.Name).Distinct().Count() != items.Select(x => x.Name).Count())
以上陈述是我如何检查集合中是否有重复名称的项目,但我不知道如何为多个属性执行此操作。
解决方案
使用匿名类型选择复合键,例如
int totalCount = items.Count();
int distinctCount = items.Select(x => new { x.Name, x.Other })
.Distinct()
.Count();
匿名类型会根据其属性自动实现相等和哈希码(以及这些属性类型的默认相等比较器)。
其他提示
只需选择一个新的匿名对象
var keys = items.Select( x => new { x.Name, x.Other } ).ToList();
if (keys.Distinct().Count() != keys.Count())
{
...
}
不隶属于 StackOverflow