2013-07-11 12 views
9

Problem: Mam formularz wyszukiwania, który pozwala użytkownikom na wyszukiwanie czegoś gdzie data rekord przypada między 2 dat (dd/mm/rrrr)Porównaj Tylko Data Część 2 Zmienne DateTime w LINQ EF

Wszystkie rekordów i obiektów są typu Datetime, ale wszystko, co trzeba porównać, to części daty, a nie część czasu.

Zgodnie z MSDN właściwość Data jest obsługiwana w LINQ to jednak oświadczenie pisemne nie pozwoli mi dołączyć .Date do części lambda:

Błąd:

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

przykładu :

x.DateCreated.Date 

Jestem pewien, że ten problem pojawia się bardzo często - Ho w rozwiązam to?

Chyba mogłem pad drugą datę, dołączając 23:59:59 = 86399 sek do < = część

Oto oświadczenie. (Db jest obiektem kontekst)

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

Jaki komunikat o błędzie pojawia się przy próbie 'x.DateCreated.Date'? – Treb

+0

Co to jest "DateCreated"? –

+0

DateCreated jest typem DateTime – Slinky

Odpowiedz

14

Należy użyć TruncateTime funkcję:

EntityFunctions.TruncateTime(x.DateCreated) 
+6

zastąpiony przez 'DbFunctions.TruncateTime' – gor

1

używam następujące rozwiązanie

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

należy użyć DbFunctions.TruncateTime() w Entity Framework wersja 6.

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

Aby uzyskać wszystkie elementy, których data jest większa niż fromdate ignorując timepart.

Dzięki @gor.

Powiązane problemy