LINQ 의 Single, SingleOrDefault, First , FirstOrDefault 이해하기

Single

요소 일치가 발견되면 요소 집합에서 하나의 특정 요소를 반환합니다. 콜렉션 내의 요소에 일치하는 것이 없으면, 예외가 Throw됩니다.

SingleOrDefault

요소 일치가 발견되면 요소 집합에서 하나의 특정 요소를 반환합니다. 컬렉션에서 해당 요소에 대해 둘 이상의 일치 항목이 발견되면 예외가 throw됩니다. 콜렉션의 해당 요소와 일치하는 것이없는 경우 기본값이 리턴됩니다.


  1. List<int> data = new List<int> { 10, 20, 30, 40, 50 };
  2.  
  3. //Try to get element at specified position
  4. Console.WriteLine(data.ElementAt(1)); //result:20
  5.  
  6. //Try to get element at specified position if exist, else returns default value
  7. Console.WriteLine(data.ElementAtOrDefault(10)); //result:0, since default value is 0
  8.  
  9. Console.WriteLine(data.First()); //result:10
  10. Console.WriteLine(data.Last()); //result:50
  11.  
  12. //try to get first element from matching elements collection
  13. Console.WriteLine(data.First(d => d <= 20)); //result:10
  14.  
  15. //try to get first element from matching elements collection else returns default value
  16. Console.WriteLine(data.SingleOrDefault(d => d >= 100)); //result:0, since default value is 0
  17.  
  18. //Try to get single element
  19. // data.Single(); //Exception:Sequence contains more than one element
  20.  
  21. //Try to get single element if exist otherwise returns default value
  22. // data.SingleOrDefault(); //Exception:Sequence contains more than one element
  23.  
  24. //try to get single element 10 if exist
  25. Console.WriteLine(data.Single(d => d == 10)); //result:10
  26.  
  27. //try to get single element 100 if exist otherwise returns default value
  28. Console.WriteLine(data.SingleOrDefault(d => d == 100)); //result:0, since default value is 0

First

해당 요소에 대해 하나 이상의 일치 항목이 발견되면 요소 컬렉션에서 첫 번째 특정 요소를 반환합니다. 콜렉션의 해당 요소에 대해 일치하는 항목이 없으면 예외가 발생합니다.

FirstOrDefault

해당 요소에 대해 하나 이상의 일치 항목이 발견되면 요소 컬렉션에서 첫 번째 특정 요소를 반환합니다. 콜렉션의 해당 요소와 일치하는 것이없는 경우 기본값이 리턴됩니다.

Single, SingleOrDefault, First 및 FirstOrDefault를 사용하는 경우

Single, SingleOrDefault, First 및 FirstOrDefault를 선택하는 동안 다음 사항을주의해야합니다.

  1. 결과 집합에 많은 레코드가 포함되어 있으면 예외가 throw되도록하려면 Single 또는 SingleOrDefault를 사용하십시오.

  2. 결과 집합에 레코드가 없는 경우 기본값을 반환하려면 SingleOrDefault를 사용하십시오.

  3. 결과 집합에 관계없이 항상 하나의 레코드를 원하면 First 또는 FirstOrDefault를 사용하십시오.

  4. 결과 집합에 레코드가 없는 경우 기본값을 원하면 FirstOrDefault를 사용하십시오.

SingleOrDefault 및 FirstOrDefault의 성능

FirstOrDefault는 대개 SingleOrDefault와 비교하여 더 빨리 수행합니다. SingleOrDefault는 첫 번째 일치 항목을 찾을 때까지 컬렉션을 반복하므로 일반적으로 SingleOrDefault와 비교하여 더 빠르게 수행됩니다. SingleOrDefault는 전체 컬렉션을 반복하여 하나의 일치 항목을 찾습니다.

TAGS.

Comments 0