문제

방금 LINQ와 Lambda 표현식을 배우기 시작했고 복잡한 객체 컬렉션에서 복제물을 찾는 데 적합한 것 같습니다. .

내 객체는 list.list.uniquecustomeridentifier와 같이 구성됩니다

전체 복잡한 객체에 중복 유일성 식별기가 없는지 확인해야합니다. 중복이있는 경우, 복제 된 사람을 식별하고 복제물 목록을 반환해야합니다.

도움이 되었습니까?

해결책

  • 계층 구조를 풀어주십시오
  • 각 요소를 고유 한 속성에 투영하십시오
  • 이 ID를 그룹화하십시오
  • 요소가 1 개가 넘는 그룹별로 그룹을 필터링합니다.
  • 각 그룹을 그룹의 열쇠로 돌려
  • 쿼리를 열거하고 결과를 목록에 저장하십시오.

var result = 
  myList
    .SelectMany(x => x.InnerList)
    .Select(y => y.uniqueCustomerIdentifier)
    .GroupBy(id => id)
    .Where(g => g.Skip(1).Any())
    .Select(g => g.Key)
    .ToList()

다른 팁

LINQ 연산자 CORLET ()가있어 ID 만 원한다면 별도의 레코드 세트로 필터링 할 수 있습니다. 당신이 당신의 클래스를 비난하기 위해 당신의 수업을 설정 한 경우, 당신과 동일하거나 iqualitycomparer 고유 한 확장 방법을 직접 호출하여 목록에서 고유 한 결과를 반환 할 수 있습니다. 추가 보너스로 유니언과 교차 방법을 사용하여 두 목록간에 병합 또는 필터링 할 수도 있습니다.

또 다른 옵션은 ID별로 그룹화 한 다음 첫 번째 요소를 선택하는 것입니다.

var results = from item in list
              group item by item.id into g
              select g.First();

두 목록 계층을 평평하게하려면 SelectMany 평평한 방법 IEnumerable<IEnumerable<T>> ~ 안으로 IEnumerable<T>.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top