我有一个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)
(编辑)注意:我被限制使用域<>按域规则,并且使用字典<>不是一个选项.
获取重复的名称:
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)