是否有Linq操作从项目列表中检索特定项目,其中项目具有应该是唯一的属性的属性值?

Cor*_*ker 1 c# linq

我有一个List<>自定义对象.此自定义类型具有一个属性Name,该属性在列表中应该是唯一的.换句话说,列表中没有2个项目的Name属性应该具有相同的值.

当我验证此列表时,我想检索有问题的项目.是否有Linq操作允许我这样做?

我希望有类似的东西

listOfItems.Where(x => x.Name.Equals(/*anything else in this list with the same value for name */)
Run Code Online (Sandbox Code Playgroud)

基本上,我试图避免针对列表中的每个项目(在嵌套的foreach中)检查整个列表:

private IList<ICustomObject> GetDuplicatedTypeNames(IList<ICustomObjects> customObjectsToFindDuplicatesIn)
    {
        var duplicatedList = new List<ICustomObject>();

        foreach(var customObject in customObjectsToFindDuplicatesIn)
            foreach(var innerCustomObject in customObjectsToFindDuplicatesIn)
                if (customObject == innerCustomObject && customObject .Name.Equals(innerCustomObject.Name))
                    duplicatedList.Add(customObject);

        return duplicatedList;
    }
Run Code Online (Sandbox Code Playgroud)

(编辑)注意:我被限制使用域<>按域规则,并且使用字典<>不是一个选项.

PHe*_*erg 8

获取重复的名称:

 var duplicates = listOfItems
        .GroupBy(i => i.Name)
        .Where(g => g.Count() > 1)
        .Select(g => g.Key);
Run Code Online (Sandbox Code Playgroud)

编辑:获取重复项:

var duplicates = listOfItems
    .GroupBy(i => i.Name)
    .Where(g => g.Count() > 1)
    .SelectMany(g => g);
Run Code Online (Sandbox Code Playgroud)