C#

[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의 두 가지 메서드가 있습니다.

Leave a Reply

error: Content is protected !!