La consulta de Null Dapper.net sigue devolviendo la excepción de referencia nula con FirstOrDefault ()

c# dapper linq

Pregunta

Me gustaría devolver el ID máximo de una tabla con Dapper.net

var x = connection.Query<int>("SELECT max(val) FROM info").FirstOrDefault();

Esto funciona, a menos que no exista una fila, entonces obtengo una

Referencia a objeto no establecida como instancia de un objeto.

¿No debería el 'OrDefault' significa que esto devuelve 0 cuando no hay registros?

¿Cómo puedo devolver 0 - o algún valor no nulo para evitar un bloqueo?

Gracias

Respuesta aceptada

El problema es que le está diciendo a Dapper que espere una secuencia de int , pero en realidad tiene la posibilidad de un valor null . Entonces, o necesitas cambiar el tipo

var x = connection.Query<int?>("SELECT max(val) FROM info").Single() ?? 0;

O necesita cambiar la consulta para manejar el null .

var x = connection.Query<int>("SELECT COALESCE(max(val), 0) FROM info").Single();

Estoy usando Single aquí porque esta consulta solo debería devolver exactamente una fila.

Utilizaría FirstOrDefault cuando espere una secuencia y solo desee el primer elemento, o si no hay elementos, desea el valor predeterminado del tipo de elemento.


Respuesta popular

var x = connection.Query<int>("SELECT ISNULL(max(val), 0) FROM info").Single();

Puede usar ISNULL si desea seleccionar el valor predeterminado si el valor es nulo.



Licencia bajo: CC-BY-SA with attribution
No afiliado con Stack Overflow
¿Es esto KB legal? Sí, aprende por qué
Licencia bajo: CC-BY-SA with attribution
No afiliado con Stack Overflow
¿Es esto KB legal? Sí, aprende por qué