259

LINQ 쿼리에 대한 질문이 있습니다. 일반적으로 쿼리는IEnumerable<T>유형. 반환 값이 비어있는 경우 null인지 아닌지를 확인하십시오. 나는 다음과 같은 것이 확실하지 않다.ToList()예외를 던지거나 단지 비어있게 만듭니다.List<string>아무것도 발견되지 않은 경우IEnumerable결과?

   List<string> list = {"a"};
   // is the result null or something else?
   IEnumerable<string> ilist = from x in list where x == "ABC" select x;
   // Or directly to a list, exception thrown?
   List<string> list1 = (from x in list where x == "ABC" select x).ToList();

나는 그것이 매우 간단한 질문이라는 것을 알고 있지만 당분간 VS를 사용할 수는 없습니다.


7 답변


418

빈 열거 형을 반환합니다. 그것은 null이되지 않을 것이다. 당신은 수면 소리 :)


30

다음을 확인할 수도 있습니다..Any()방법:

if (!YourResult.Any())

그 메모 만.Any여전히 데이터베이스에서 레코드를 검색합니다. 하고있는.FirstOrDefault()/.Where()오버 헤드가 많지만 쿼리에서 반환 된 객체를 잡을 수 있습니다.


  • 질문은 데이터베이스를 어디에서 언급합니까? - cja
  • 편집자에게 물어봐야하는데 DB에 대해 언급하지 않았습니다. :) - Noich
  • 점 편집자가 소리내는 것은, 그러나, DB 또는 아니다. 나는 그들이 말하는 것을 믿는다..Any()일치하는 레코드가 있다면 알려줄 것입니다. 실제 쿼리를 수행하면 특정 값을 찾기 위해 null 일 수 있습니다..Any()아니다. - vapcguy
  • 실제로 편집이 잘못되었을 수 있습니다. 엔티티에 linq를 사용하면 db가이를 바로 가기로 처리 할 수 있으며 true 또는 false를 제외한 클라이언트에 전혀 데이터가 전송되지 않습니다. - Mafii

16

var lst = new List<int>() { 1, 2, 3 };
var ans = lst.Where( i => i > 3 );

(ans == null).Dump();  // False
(ans.Count() == 0 ).Dump();  // True

(덤프는LinqPad)


  • 정확하게! 결과를 더 잘 나타냅니다. - netfed
  • TOCount()또한 속성 일뿐만 아니라 방법이기도합니다. - heyNow
  • count가 모든 항목을 통해 열거되기 때문에 .Any ()를 사용하지 않아야합니까? - SHEePYTaGGeRNeP

11

.ToList는 빈 목록을 반환합니다. (새로운 List ()와 동일);


6

Linq-to-SQL에서 결과가없는 쿼리의 첫 번째 요소를 얻으려고하면 얻을 수 있습니다.sequence contains no elements오류. 언급 한 오류가 다음과 같지 않음을 확신 할 수 있습니다.object reference not set to an instance of an object. 결론적으로 아니오, null을 말할 수 없으므로 null을 반환하지 않습니다.sequence contains no elements항상 말할 것이다.object reference not set to an instance of an object;)


  • 오, 너의 설명은 더 많은 이해를 돕는다. 고맙습니다 ! - Kay Lee

5

다른 게시물은 결과가 ToList ()가 빈 목록으로 바뀌는 "빈"IQueryable이라는 것을 분명히했습니다.

연산자 중 일부는주의해야합니다. 빈 연산자를 보낸다면 던져 버릴 것입니다. 당신이 그들을 함께 묶을 때 일어날 수 있습니다.


  • " 빈 열거 형을 보내면 던져 넣기 때문에 일부 연산자는주의해야합니다. 이러한 작업을 함께 연결하면 이러한 상황이 발생할 수 있습니다. " -이게 날 잡았어. 나는 다른 반환 값을 반환하는 null 값을 리턴했습니다. 이로 인해 두 번째 쿼리는 두 번째 쿼리에 값이 입력되지 않아서 무엇을 던져도 아무 것도 던지지 않게되었습니다. - trevorc

4

그것은 예외를 던지지 않을 것이다, 당신은 빈 목록을 얻을거야.

연결된 질문


관련된 질문

최근 질문