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())
{
 ...
}
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top