sintaxis query for c# linq

c# - query - ¿Qué devuelve LINQ cuando los resultados están vacíos?



linq in c# object (7)

.ToList devuelve una lista vacía. (igual que el nuevo List ());

Tengo una pregunta sobre la consulta LINQ. Normalmente, una consulta devuelve un tipo IEnumerable<T> . Si la devolución está vacía, no estoy seguro si es nula o no. No estoy seguro de si la siguiente ToList() arrojará una excepción o simplemente una List<string> vacía List<string> si no se encuentra nada en el resultado de 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();

Sé que es una pregunta muy simple, pero no tengo VS disponible por el momento.


En Linq-to-SQL, si intenta obtener el primer elemento en una consulta sin resultados, obtendrá una sequence contains no elements error de sequence contains no elements . Puedo asegurarle que el error mencionado no es igual a la object reference not set to an instance of an object . En conclusión, no, no devolverá el valor nulo, ya que null no puede decir que la sequence contains no elements , siempre dirá object reference not set to an instance of an object ;)


No lanzará excepción, obtendrá una lista vacía.


Otras publicaciones aquí han dejado en claro que el resultado es un IQueryable "vacío", que ToList () cambiará correctamente para ser una lista vacía, etc.

Tenga cuidado con algunos de los operadores, ya que lanzarán si les envía un enumerable vacío. Esto puede suceder cuando los encadenas.


Se devolverá un enumerable vacío. No será nulo. Puedes dormir sano :)


También puedes consultar el método .Any() :

if (!YourResult.Any())

Solo una nota de que .Any todavía recuperará los registros de la base de datos; haciendo un .FirstOrDefault()/.Where() tendrá la misma sobrecarga, pero luego podrá capturar los objetos devueltos de la consulta


var lst = new List<int>() { 1, 2, 3 }; var ans = lst.Where( i => i > 3 ); (ans == null).Dump(); // False (ans.Count() == 0 ).Dump(); // True

(Dump es de LinqPad )