Sono nuovo a LINQ e sto provando a creare alcuni punti dati da una tabella a un grafico. I tre campi di importanza in questa tabella sono l'id, il tempo e il valore. Sto scrivendo una query per ottenere il valore medio su un tempo prestabilito per un ID scelto. LINQ ho scritto segue:Gestione risultati nulli con il metodo LINQ Average()
var value = (from t in _table
where t.Id == id
&& t.Time >= intervalStartTime
&& t.Time <= intervalEndTime
select t.Value).Average();
Tuttavia questo si blocca in fase di esecuzione con:
"il valore null non può essere assegnato a un membro di tipo System.Decimal che è un non-nullable valore tipo .. "
A determinati intervalli non ci sono dati quindi SQL LINQ genera resi nulli, che mi piacerebbe essere COALESCED a 0 ma invece blocca l'applicazione. C'è un modo per scrivere questa query LINQ per essere in grado di gestirlo correttamente?
La definizione della tabella per rendere le cose più chiare:
[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; }
}
Grazie, hai fatto. – Magpie
solo per aiutare gli altri in questo problema: se la query * non restituisce alcuna riga *, nulla sarà di grande aiuto. devi solo evitare di eseguire la query del tutto. almeno questa è stata la mia esperienza. – horace
@horace: Semplicemente non è vero. Media, Min, Max, Sum funzionano tutte quando la query non corrisponde a righe * a condizione che il risultato aggregato sia annullabile *. Come puoi vedere nella query sopra, avrai bisogno di un cast per rafforzare il nullable quando l'espressione da aggregare non è di tipo nullable. (Nel caso raro che non funzioni ancora, probabilmente stai trattando con un provider LINQ sfacciato. Non è colpa di LINQ, e nessun fornitore che conosco è incasinato.) – Ruben