Con Linq alle entità, sto tentando di eseguire una query su una tabella dei registri per trovare le righe vicino a una riga corrispondente. Ho problemi con l'aggiunta di una data all'interno della query. Questo è quello che ho finora.Aggiungere una data in Linq alle entità
from
l in objectSet.Logs
let
match = objectSet.Logs.Where(whatever).FirstOrDefault()
where
l.Timestamp > (match.Timestamp - twoHours)
&& l.Timestamp < (match.Timestamp + twoHours)
select
l
Tralasciando la "qualunque" condizione che trova la riga che mi interessa, "twoHours" è stato un periodo di tempo variabile, una funzione .AddHours()
e così via. Non ho trovato il modo giusto in cui EF può generare SQL che aggiunge il valore di un campo (match.Timestamp) a una costante.
La soluzione ovvia è eseguire prima la query "match" e quindi utilizzare il valore letterale in una seconda query, ma ho semplificato l'esempio di codice qui al problema principale (aggiungendo le date nella query) e in realtà la mia domanda è più complessa e questo non sarebbe l'ideale.
Acclamazioni
Ho avuto un problema simile. Il problema è che .AddHours() non ha un equivalente SQL e, quindi, Linq non è in grado di convertirlo in un'espressione SQL. Ho risolto questo problema invocando l'esecuzione ritardata chiamando .ToList() e poi applicando il filtro .AddHours() su una raccolta in memoria. – dotariel
@ XSaint32, questo è doppiamente sbagliato. Ci * è * [un (T) equivalente SQL,] (http://msdn.microsoft.com/en-us/library/ms186819.aspx) e tu * puoi * chiamarlo dall'EF. –
@Craig - Grazie per l'input. Non ero conscio di ciò. – dotariel