2011-12-28 13 views
9

Muszę sprawdzić, czy dwie daty są równe w zapytaniu Linq, a daty pochodzą z dwóch różnych tabel (nie jako parametru). Przyjrzałem się istniejącym rozwiązaniom w Internecie, a także w SO. niektóre nie mają zastosowania w moim przypadku, a niektóre nie są eleganckie. po prostu szukamy lepszego alternatywnego rozwiązania, jeśli takie istnieje.Eleganckie rozwiązanie do sprawdzenia, czy dwie daty są równe, w Linq (gdzie druga data NIE jest parametrem)

próbka zapytań (trzeba porównać dotychczas jedynie fragmenty):

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) 

ten nie powiedzie się z powodu błędu „«data»nie jest obsługiwana w LINQ do Entitiies tylko inicjatorów, członków jednostki, a właściwości jednostka nawigacji. są obsługiwane "

ma post 'Date' is not supported in LINQ to Entities. Only initializers, entity members, and entity navigation properties are supported ma rozwiązanie, które porównuje dzień, miesiąc i rok oddzielnie. Próbowałem zawinąć go w metodę rozszerzenia, ale wydaje się, że Linq nie lubi również metod rozszerzeń. ponieważ druga data nie jest zmienna, nie mogę użyć innego rozwiązania wymienionego w połączonym poście (i nie mogę nazwać metody "AddDays" na datę wewnątrz Linq z jakiegoś powodu). Wygląda na to, że w Linq jest wiele ograniczeń związanych z interfejsem API Data.

+0

Czy porównując dzień, miesiąc i rok osobno działa zgodnie z oczekiwaniami? – dasblinkenlight

+0

tak, działa, jeśli porównuję je osobno. – RKP

Odpowiedz

16

Spróbuj użyć DiffDays z klasy EntityFunctions. Osobiście nigdy nie używane, ale warto spróbować tak:

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

Wielkie dzięki. to działa jak urok. Przyjrzałem się wygenerowanemu SQL, a porównanie dat jest konwertowane na DATEDIFF (dzień, t1.Data1, t2.Data2) = 0, co jest poprawne. Nie wiedziałem wcześniej o tym "EntityFunctions". Jeszcze raz dziękuję. – RKP

+0

Witaj, cieszę się, że pomogłeś :) – Reniuz

+0

zapomniałem wspomnieć, że użyłem lekko zmienionej wersji twojego kodu. Nie mogę użyć właściwości "Data" w "Datetime", jak wspomniano w moim poście, więc użyłem "EntityFunctions.DiffDays (t1.Date1, t2.Date2) == 0" i działało. – RKP

0

O ile pamiętam, możesz po prostu porównać daty, korzystając z numeru == operator.

+0

'==' porównuje obie części daty i czasu; PO chce porównać tylko datę. – dasblinkenlight

Powiązane problemy