Soy nuevo en LINQ y trato de crear algunos puntos de datos de una tabla a otra. Los tres campos de importancia en esta tabla son el ID, el tiempo y el valor. Estoy escribiendo una consulta para obtener el valor promedio durante un tiempo establecido para una identificación elegida. El LINQ He escrito sigue:Manejo de resultados nulos con el método LINQ Average()
var value = (from t in _table
where t.Id == id
&& t.Time >= intervalStartTime
&& t.Time <= intervalEndTime
select t.Value).Average();
Sin embargo, esto se bloquea en tiempo de ejecución con:
"El valor nulo no puede ser asignado a un miembro con el tipo System.Decimal que es un no anulable tipo de valor ... "
A ciertos intervalos no hay datos, por lo que el SQL LINQ genera devoluciones nulas, lo que me gustaría es COALESCED a 0, pero en su lugar falla la aplicación. ¿Hay alguna manera de escribir esta consulta LINQ para poder manejar esto correctamente?
La definición de la tabla para hacer las cosas más claras:
[Serializable]
[Table(Name = "ExampleTable")]
public class ExampleTable
{
[Column(Name = "Id")]
public int Id { get; set; }
[Column(Name = "Time")]
public DateTime Time { get; set; }
[Column(Name = "Value")]
public int Value{ get; set; }
}
Gracias que lo ha hecho. – Magpie
solo para ayudar a otros en este tema: si la consulta * no devuelve ninguna fila *, nada realmente ayudará. solo tienes que evitar ejecutar la consulta por completo. Al menos esa fue mi experiencia. – horace
@horace: Eso simplemente no es verdad. Promedio, Mín., Máx., Suma todo funciona cuando la consulta no coincide con filas * siempre que el resultado agregado sea nulo *. Como puede ver en la consulta anterior, necesitará un molde para aplicar la capacidad de anulación cuando la expresión para agregar no sea de tipo anulable. (En el raro caso de que todavía no funcione, probablemente estés lidiando con un proveedor de LINQ escamoso. Eso no es culpa de LINQ, y ningún proveedor que yo conozca se equivocó). – Ruben