2013-07-11 8 views
9

Problema: Ho un modulo di ricerca che permette agli utenti di cercare qualcosa in cui la data di registrazione compresa tra 2 date (gg/mm/aaaa)Confronta Proprio Data Parte 2 variabili DateTime in LINQ con EF

Tutti dei record e degli oggetti sono di tipo datetime ma tutto ciò che devo confrontare è la data parti non la parte temporale.

Secondo MSDN, la proprietà data è supportato in LINQ tuttavia questa affermazione come scritto non mi permette di aggiungere .Data alla parte lambda:

Errore:

The specified type member 'Date' is not supported in LINQ to Entities. Only initializers, entity members, and entity navigation properties are supported. 

Esempio :

x.DateCreated.Date 

sono sicuro che questo problema si presenta molto - ho lo risolvo?

Credo che avrei potuto riempire il altra data aggiungendo 23:59:59 = 86399 secondi per la < = parte

Ecco la dichiarazione. (Db è un oggetto di contesto)

model.Contacts = 
       db.Prospects.Where(x => x.DateCreated >= df.Date && x.DateCreated <= dt.Date) 
        .OrderByDescending(x => x.DateCreated) 
        .Take(100) 
        .ToList(); 
+1

Quale messaggio di errore si ottiene quando si prova 'x.DateCreated.Date'? – Treb

+0

E che tipo è "DateCreated"? –

+0

DateCreated è solo un tipo DateTime – Slinky

risposta

14

si dovrebbe utilizzare la funzione TruncateTime:

EntityFunctions.TruncateTime(x.DateCreated) 
+6

sostituito con 'DbFunctions.TruncateTime' – gor

1

Io uso la soluzione seguente

DateTime startDate = new DateTime(df.Year, df.Month, df.Day, 0,0,0); 
DateTime endDate = new DateTime(df.Year, df.Month, df.Day, 23,59,59); 

model.Contacts = 
       db.Prospects.Where(x => x.DateCreated >= startDate && x.DateCreated <= endDate) 
        .OrderByDescending(x => x.DateCreated) 
        .Take(100) 
        .ToList(); 
4

Si dovrebbe usare DbFunctions.TruncateTime() nella versione Entity Framework 6.

var fromDate = criteria.FromCreatedDate.Value.Date; 
items.Where(i => DbFunctions.TruncateTime(i.CreatedOnDate) >=fromDate); 

per ottenere tutti gli elementi la cui data è maggiore di fromdate ignorando il Timepart.

Grazie a @gor.

Problemi correlati