LINQ 또는 LAMBDA 표현식을 사용하여 복잡한 물체에서 복제물 확인
-
03-07-2019 - |
문제
방금 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>
.
제휴하지 않습니다 StackOverflow