firstordefault - linq is null c#
Linq FirstOrDefault (4)
En primer lugar, esa no es una consulta válida. Cuando utiliza la sintaxis de la consulta ( from blah in blah ...
), debe tener una cláusula de select
. Debería ser más como:
var manager =
(from n in DataContext.Manager
where n.Name == "Jones"
select n).FirstOrDefault();
Para responder a su pregunta, al llamar a FirstOrDefault()
en su consulta, se obtendrá el primer resultado de la consulta o el valor predeterminado para el tipo (lo más probable es que sea null
en este caso). Para lo que está buscando, este no será un uso adecuado ya que la consulta puede contener más de un resultado.
Si desea verificar que la consulta solo SingleOrDefault()
un resultado único, debe usar el método SingleOrDefault()
. Devolverá el elemento producido por la consulta, el valor predeterminado null
si estaba vacío o arrojará una excepción si hubiera más de un elemento.
Si no desea lanzar una excepción, puede ser más fácil simplemente arrojar los primeros dos resultados en una lista y verificar que solo tenga uno.
var managers =
(from m in DataContext.Manager
where m.Name == "Jones"
select m).Take(2).ToList();
if (managers.Count == 1)
{
// success!
var manager = managers.First();
// do something with manager
}
else
{
// error
}
Tengo la siguiente consulta LINQ:
Manager mngr = (from tr in DataContext.Manager
where tr.Name = "Jones").FirstOrDefault();
¿Cómo puedo verificar si la consulta devolvió 1 registro como no puedo? .Count para obtener el conteo.
Está utilizando una ID para la condición where
, creo que ya debería haber garantizado que esta consulta devuelve solo un resultado.
Si su problema no tiene ningún resultado, compruebe el uso de FirstOrDefault()
del título de MSDN .
int[] numbers = { };
int first = numbers.FirstOrDefault();
Console.WriteLine(first);
/*
This code produces the following output:
0
*/
Puede usar el método de extensión SingleOrDefault
para expresar que solo la consulta debe devolver un resultado.
Manager manager = (from tr in DataContext.Manager
where tr.ID = "2323").SingleOrDefault();
Sin embargo, no le indica si obtuvo 0 resultados o más de 1.
Si desea contar los registros, cuente el resultado de la consulta sin FirstOrDefault.
var mngr = (from tr in DataContext.Manager
where tr.ID = "2323")
if(mngr.Count() == 0)
....
else
Manager manager = mngr.First(); //No need for default since we know we have a record.
Todavía puede ejecutar primero o predeterminado en el mngr para obtener el administrador específico.