결과가 비어있을 때 LINQ는 무엇을 반환합니까?


319

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를 사용할 수 없습니다.


11
결과가 열거 가능하다고 생각합니다.
David.Chu.ca

답변:


512

빈 열거 형을 반환합니다. null이되지 않습니다. 당신은 소리를 잘 수 있습니다 :)


38

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

if (!YourResult.Any())

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


5
질문은 데이터베이스를 어디에 언급합니까?
cja

4
편집 한 사람에게 물어봐야합니다. DB는 언급하지 않았습니다.
Noich

포인트 편집기는 DB의 유무에 관계없이 소리가 나지 않습니다. 나는 그들이 말하는 .Any()것이 일치하는 레코드가 있는지 말해 줄 것이라고 믿습니다 . 여기서 특정 값을 찾기 위해 실제 쿼리를 수행하면 null .Any()이 아닐 수 있습니다 .
vapcguy

1
편집이 실제로 잘못되었을 수 있습니다. linq를 엔티티에 사용하는 경우 db가이를 단축시킬 수 있으며 true 또는 false를 제외하고는 클라이언트로 데이터가 전송되지 않습니다.
Mafii

19
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

TIL Count()은 단지 부동산 일뿐만 아니라 방법입니다
heyNow

2
count는 모든 항목을 열거하기 때문에 .Any ()를 사용해서는 안됩니까?
SHEePYTaGGeRNeP


8

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


1
아, 당신의 설명은 더 이해하는 데 도움이됩니다. 감사합니다 !
Kay Lee

이 질문에 대답합니까?
ChiefTwoPencils

7

여기의 다른 게시물은 결과가 "빈"IQueryable임을 분명히하여 ToList ()가 빈 목록 등으로 올바르게 변경됩니다.

빈 열거 형을 보내면 던질 수 있으므로 일부 연산자에주의하십시오. 당신이 그들을 묶을 때 발생할 수 있습니다.


3
"비어있는 열거 형을 보내면 던져 질 수 있기 때문에 일부 연산자에주의를 기울이십시오. 이는 서로 연결하면 발생할 수 있습니다." -이것이 나를 얻는 것입니다. null 반환 값을 얻은 다음 다른 쿼리에 입력했습니다. 이로 인해 두 번째 쿼리에 값이 공급되지 않았기 때문에 두 번째 쿼리가 캐스팅 대상에 관계없이 발생했습니다.
trevorc

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.