[C#]LINQ Except() 연산자
[C#]LINQ Except()
두개의 객체를 비교하여 중복되지않는 항목를 추출할 때 유용하다. Intersect() 연산자와 반대의 개념이다.
1. 비교하는 객체가 단일 데이터 일 경우
string[] arrStr = { "냐옹", "냥냥", "큰냥" };
string[] arrStr2 = { "큰냥", "작은냥", "영희", "철수" };
var singleArr = arrStr.Except(arrStr2);
foreach (var item in singleArr)
{
Console.WriteLine(item);
}
//결과값 : 냐옹,냥냥
2.비교하는 객체가 단일 데이터가 아닌 집합체 인경우
List<Student> list1 = new List<Student>();
list1.Add(new Student { Uid = 1, Name = "영희", City = "서울" });
list1.Add(new Student { Uid = 2, Name = "철수", City = "부산" });
list1.Add(new Student { Uid = 3, Name = "똘이", City = "전남" });
List<Student> list2 = new List<Student>();
list2.Add(new Student { Id = 4, Name = "철희", City = "전북" });
list2.Add(new Student { Id = 5, Name = "영희", City = "서울" });
list2.Add(new Student { Id = 6, Name = "철수", City = "부산" });
var list3 = list1.Except(list2, new StudentNameComparer());
foreach (var item in list3)
{
Console.WriteLine(item.Name);
}
public class Student
{
public int Uid { get; set; }
public string Name { get; set; }
public string City { get; set; }
}
public class StudentNameComparer : IEqualityComparer<Student>
{
public bool Equals(Student x, Student y)
{
if (string.Equals(x.Name, y.Name, StringComparison.OrdinalIgnoreCase))
{
return true;
}
return false;
}
public int GetHashCode(Student obj)
{
return obj.Name.GetHashCode();
}
}
IEqualityComparer 인터페이스를 사용하여 새로운 클래스를 생성합니다.
IEqualityComparer에는 Equals 및 GetHasCode의 두 가지 메서드가 있습니다.