컬렉션에 한 쌍의 속성에 대해 동일한 값을 가진 항목이 있는지 확인하기위한 LINQ 작업이 있습니까?

StackOverflow https://stackoverflow.com/questions/1630277

문제

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())
{
 ...
}
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top