Eu tenho uma pergunta sobre a consulta LINQ. Normalmente, uma consulta retorna um IEnumerable<T>
tipo. Se o retorno estiver vazio, não tenha certeza se é nulo ou não. Não tenho certeza se o seguinte ToList()
irá lançar uma exceção ou apenas um vazio List<string>
se nada for encontrado no IEnumerable
resultado?
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();
Eu sei que é uma pergunta muito simples, mas não tenho o VS disponível no momento.
Respostas:
Ele retornará um enumerável vazio. Não será nulo. Você pode dormir som :)
fonte
Você também pode verificar o
.Any()
método:Apenas uma observação que
.Any
ainda recuperará os registros do banco de dados; fazer a.FirstOrDefault()/.Where()
será uma sobrecarga, mas você poderá capturar o (s) objeto (s) retornado (s) da consultafonte
.Any()
apenas lhe dirá se você possui algum registro correspondente, onde fazer uma consulta real para encontrar um valor específico pode ser nulo quando.Any()
não estiver.(O despejo é do LinqPad )
fonte
Count()
é também um método, não apenas a propriedade.ToList retorna uma lista vazia. (o mesmo que a nova List ());
fonte
No Linq-to-SQL, se você tentar obter o primeiro elemento em uma consulta sem resultados, obterá um
sequence contains no elements
erro. Posso garantir que o erro mencionado não é igual aobject reference not set to an instance of an object
. em conclusão não, ele não retornará nulo, pois null não pode dizersequence contains no elements
que sempre seráobject reference not set to an instance of an object
;)fonte
Outras postagens aqui deixaram claro que o resultado é um IQueryable "vazio", que ToList () mudará corretamente para ser uma lista vazia etc.
Tenha cuidado com alguns dos operadores, pois eles serão lançados se você enviar um enumerável vazio. Isso pode acontecer quando você os une.
fonte
Não lançará exceção, você receberá uma lista vazia.
fonte