2012-12-06 10 views
10

Devo restituire un elenco di elementi dal mio database che scadono in un momento prestabilito alla data fornita dall'elemento. Il mio codice errato è il seguente:Confronto delle date utilizzando LINQ alle entità (Entity Framework)

return All().Where(o => new DateTime(o.expiry_date.Year, o.expiry_date.Month, o.expiry_date.Day, 17, 30, 0) >= DateTime.Now) 

L'errore che ottengo è:

costruttori solo senza parametri e inizializzatori sono supportati in LINQ to Entities

Qualcuno sa come posso risolvere Questo?

+1

si fa a non usare 'expiry_date' direttamente? '. Dove (o => o.expiry_date> = DateTime.Now)'. – Oded

+0

Deve incorporare la data specificata dall'elemento ma utilizzare l'ora predeterminata, quindi sfortunatamente no. Anche la creazione di una proprietà expiry_date2 non funzionerebbe perché prima dovresti fare una ToList(). – Jimbo

+0

Passare attraverso collegamento muggito .. [di verificare le date solo in LINQ] [1] [1]: http://stackoverflow.com/a/24380028/1833050 –

risposta

26

Utilizzare invece EntityFunctions. Forse il metodo CreateDateTime.

Quindi forse in questo modo:

return All().Where(o => EntityFunctions.CreateDateTime(o.expiry_date.Year, o.expiry_date.Month, o.expiry_date.Day, 17, 30, 0) >= DateTime.Now) 

Aggiornamento:

Quando si utilizza EF6, utilizzare DbFunctions invece.

+8

Solo per la cronaca, EntityFunctions è deprecato in EF6, sostituito da [System.Data.Entity.DbFunctions] (http://msdn.microsoft.com/en-us/library/system.data.entity.dbfunctions (v = vs.113) .aspx). – natenho

1

favore usa:

return All().Where(o => EntityFunctions.CreateDateTime(o.expiry_date.Year, o.expiry_date.Month, o.expiry_date.Day, 17, 30, 0) >= DateTime.Now) 
8

È possibile utilizzare:

var result = await db.Articles 
      .Where(TruncateTime(x.DateCreated) >= EntityFunctions.TruncateTime(DateTime.Now)) 
      .ToListAsync(); 
Problemi correlati