2011-12-28 7 views
9

Ho bisogno di verificare se due date sono uguali nella query di Linq e le date provengono da due tabelle diverse (non come parametro). Ho esaminato le soluzioni esistenti sul web e anche in SO. alcuni non sono applicabili nel mio caso e alcuni non sono eleganti. solo cercando una soluzione alternativa migliore se ce n'è.Soluzione elegante per verificare se due date sono uguali, in Linq (dove la seconda data NON è un parametro)

query di esempio (necessità di confrontare solo le parti di data):

var query = from t1 in Table1 
      join t2 in Table2 on t1.Id equals t2.ForeignKeyId 
      where t1.Id = someId 
       && t1.Date1.Date.Equals(t2.Date2.Date) 

questo uno non riesce con un errore " 'Data' non è supportata in LINQ to Entitiies Solo inizializzatori, i membri di entità, e le proprietà di navigazione entità. sono supportati "

il post 'Date' is not supported in LINQ to Entities. Only initializers, entity members, and entity navigation properties are supported ha una soluzione che confronta giorno, mese e anno separatamente. Ho provato a racchiuderlo in un metodo di estensione, ma a Linq non piacciono neanche i metodi di estensione. poiché la seconda data non è una variabile, non posso usare l'altra soluzione menzionata nel post collegato (e non posso chiamare il metodo "AddDays" su una data all'interno di Linq per qualche motivo). Sembra che ci siano molte limitazioni con l'API Date in Linq.

+0

Vuol confrontando giorno, il mese e l'anno di funzionare esclusivamente come previsto? – dasblinkenlight

+0

sì, funziona se li paragono separatamente. – RKP

risposta

16

Provare a utilizzare DiffDays dalla classe EntityFunctions. Personalmente mai usato questo, ma vale la pena di provare in questo modo:

var query = from t1 in Table1 
     join t2 in Table2 on t1.Id equals t2.ForeignKeyId 
     where t1.Id = someId 
      && EntityFunctions.DiffDays(t1.Date1, t2.Date2) == 0 
+1

Grazie mille. funziona come un fascino. Ho esaminato l'SQL generato e il confronto della data è stato convertito in DATEDIFF (day, t1.Date1, t2.Date2) = 0, che è corretto. Non sapevo prima di questo "EntityFunctions". Grazie ancora. – RKP

+0

Benvenuto, felice che abbia aiutato :) – Reniuz

+0

dimenticato di dire che ho usato una versione leggermente modificata del tuo codice. Non posso usare la proprietà "Date" di "Datetime" come menzionato nel mio post, quindi ho usato "EntityFunctions.DiffDays (t1.Date1, t2.Date2) == 0" e ha funzionato. – RKP

0

Per quanto mi ricordo è possibile confrontare le date utilizzando lo == operator.

+0

'==' confronta sia la data che le parti del tempo; l'OP vuole solo la data da confrontare. – dasblinkenlight

Problemi correlati