LINQ(Language Integrated Query)는 간결하고 효율적인 방식으로 데이터를 쿼리하기 위한 다양한 도구 세트를 제공합니다. 일반적인 시나리오에는 한 목록에는 있지만 다른 목록에는 없는 항목을 식별하는 작업이 포함됩니다.
다음 코드 조각을 고려하세요.
<code class="language-csharp">class Program { static void Main(string[] args) { List<Person> peopleList1 = new List<Person>(); peopleList1.Add(new Person() { ID = 1 }); peopleList1.Add(new Person() { ID = 2 }); peopleList1.Add(new Person() { ID = 3 }); List<Person> peopleList2 = new List<Person>(); peopleList2.Add(new Person() { ID = 1 }); peopleList2.Add(new Person() { ID = 2 }); peopleList2.Add(new Person() { ID = 3 }); peopleList2.Add(new Person() { ID = 4 }); peopleList2.Add(new Person() { ID = 5 }); } } class Person { public int ID { get; set; } }</code>
문제 설명: peopleList1과 peopleList2라는 두 개의 목록이 주어지면 peopleList2에는 존재하지만 peopleList1에는 존재하지 않는 고유한 사람을 확인하는 LINQ 쿼리를 작성합니다. 이 예에서 원하는 결과는 ID 4와 ID 5를 가진 사람입니다.
LINQ 솔루션: 다음 LINQ 쿼리는 이 문제를 효과적으로 해결합니다.
<code class="language-csharp">var result = peopleList2.Where(p => !peopleList1.Any(p2 => p2.ID == p.ID));</code>
이 쿼리는 지정된 기준에 따라 peopleList2의 항목을 필터링하는 Where() 메서드를 사용합니다. 이 경우 조건은 peopleList1의 항목에 peopleList2의 현재 항목과 일치하는 ID가 있는지 확인합니다. 찾을 수 없는 경우(!peopleList1.Any() == true) 항목이 결과 집합에 포함됩니다.
다른 표현: 또는 쿼리를 다음과 같이 표현할 수도 있습니다.
<code class="language-csharp">var result = peopleList2.Where(p => peopleList1.All(p2 => p2.ID != p.ID));</code>
이 변형은 All() 메서드를 사용하여 peopleList1의 모든 항목이 peopleList2의 현재 항목과 다른 ID를 가지고 있는지 평가합니다. 이 조건이 true(peopleList1.All() == true)이면 해당 항목이 결과 집합에 포함됩니다.
참고: 두 방법의 계산 복잡도는 O(n*m)입니다. 여기서 n은 peopleList1의 항목 수를 나타내고 m은 peopleList2의 항목 수를 나타냅니다. 이는 대규모 데이터 세트의 경우 이 작업이 느릴 수 있음을 의미합니다. 성능이 문제인 경우 해시 테이블이나 집합 작업과 같은 다른 방법을 고려하세요.
위 내용은 LINQ는 다른 목록에는 없는 한 목록의 고유 항목을 어떻게 효율적으로 식별할 수 있습니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!