컬렉션에 한 쌍의 속성에 대해 동일한 값을 가진 항목이 있는지 확인하기위한 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();
익명 유형은 속성 (및 해당 속성의 유형에 대한 기본 평등 비교)을 기반으로 평등과 해시 코드를 자동으로 구현합니다.
다른 팁
자신의 평등 비교를 주입 할 수 있습니다. 예제는 다음과 같습니다.http://social.msdn.microsoft.com/forums/en-us/linqprojectgeneral/thread/c5b71644-2d9-422b-b7fe-ef3bef30bac/
새로운 익명의 개체를 선택하기 만하면됩니다
var keys = items.Select( x => new { x.Name, x.Other } ).ToList();
if (keys.Distinct().Count() != keys.Count())
{
...
}
제휴하지 않습니다 StackOverflow