2011-09-06 10 views
8

Próbuję uruchomić następujący fragment kodu, ale porównanie nie powiedzie się, nie przekazując moich jednostek, których oczekuję.Prosty sposób porównywania dat w atrybucie DateTime przy użyciu Entity Framework 4 i zapytań Linq

Jest to porównanie 06/09/2011 0:00:00 do 06/09/2011 12:25:00, przy czym ta ostatnia jest moją wartością rekordu bazy danych. Dlatego porównanie się nie udaje i nie otrzymuję potrzebnych rekordów.

Próbuję tylko porównać, jeśli daty pasują, nie zależy mi na czasie.

DateTime today = DateTime.Now.Date; 
var newAuctionsResults = repo.FindAllAuctions() 
         .Where(a => a.IsActive == true || a.StartTime.Value == today) 
         .ToList(); 

Jak mogę porównać tylko daty?

Jeśli użyć właściwości .Date w części .StartTime.Value, otrzymuję wyjątek:

Podany typ członek „data” nie jest obsługiwana w LINQ do podmiotów. Obsługiwane są tylko opcje inicjalizujące, elementy encji i właściwości nawigacji jednostki .

+0

Może to pytanie pomoże? LINQ | Jak wykonać porównywanie dat w zapytaniu Linq? http://stackoverflow.com/questions/1088212/linq-how-do-i-perform-date-comparison-in-a-linq-query – Kyle

Odpowiedz

16

można używać poszczególnych członków:

var newAuctionsResults = repo.FindAllAuctions() 
         .Where(a => a.IsActive == true 
            || (a.StartTime.Value.Year == todayYear 
             && a.StartTime.Value.Month == todayMonth 
             && a.StartTime.Value.Day == todayDay)) 
         .ToList(); 

... albo użyć dowolnego z the other methods/properties supported in L2E.

+0

Jest używany dla równego operatora. Co się stanie, jeśli będę musiał sprawdzić większy i mniejszy niż operator. –

-1

spróbować

DateTime todayStart = DateTime.Now.Date; 
DateTime todayEnd = DateTime.Now; 
var newAuctionsResults = repo.FindAllAuctions() 
         .Where(a => a.IsActive == true || (a.StartTime.Value >= todayStart && a.StartTime.Value <= todayEnd)) 
         .ToList(); 
11

Można również użyć EntityFunctions.TruncateTime() pod nazw System.Data.Objects

Ex.

db.Orders.Where(i => EntityFunctions.TruncateTime(i.OrderFinishDate) == EntityFunctions.TruncateTime(dtBillDate) && i.Status == "B") 

działa jak urok.

+1

Jak zatem pisze UnitTests? –

+0

EntityFunctions są teraz przestarzałe, zamiast tego użyj funkcji DbFunctions! –

Powiązane problemy