2013-06-28 10 views
22

Próbuję unieważnić żądania przyjaźni, które zostały sparowane mniej niż 30 dni temu.Jak używać DATEADD nad kolumną w LINQ - DateAdd nie jest rozpoznawany przez LINQ

var requestIgnored = context.Request 
    .Where(c => c.IdRequest == result.IdRequest 
      && c.IdRequestTypes == 1 
      && c.Accepted == false 
      && DateTime.Now <= (((DateTime)c.DateResponse).AddDays(30))) 
    .SingleOrDefault(); 

c.DateResponse jest typu DateTime?. Błąd mam to:

LINQ nie rozpoznaje .AddDays poleceń

+0

Jakiego LinqProvider używasz? Dla L2E: http://stackoverflow.com/questions/4146300/linq-to-entityframework-datetime –

Odpowiedz

41

Edit: Jeśli używasz EntityFramework> = 6.0, użyj DbFunctions.AddDays. W przypadku starszych wersji Entity Framework należy użyć EntityFunctions.AddDays:

var requestIgnored = context.Request 
    .Where(c => c.IdRequest == result.IdRequest 
      && c.IdRequestTypes == 1 
      && c.Accepted == false 
      && DateTime.Now <= DbFunctions.AddDays(c.DateResponse, 30)) 
    .SingleOrDefault(); 
+0

EntityFunctions to dla mnie nowy świat! Dziękuję Ci!! To działało naprawdę dobrze. –

+2

Powinieneś wtedy "przyjąć jako odpowiedź". Przekreśl znacznik obok odpowiedzi. Udzieli to uznania osobie, która Ci pomogła i pomoże innym szybko zlokalizować poprawną odpowiedź. – Tormod

+0

Zauważ, że 'EntityFunctions' działa tylko wewnątrz kontekstu EF. Próba oceny metody (tj. W lokalnym zbiorze testów jednostkowych) spowoduje zgłoszenie wyjątku. –

3

Można spróbować to:

var thirtyDaysAgo = DateTime.Now.AddDays(-30); 
var requestIgnored = context.Request 
    .Where(c => 
     c.IdRequest == result.IdRequest && 
     c.IdRequestTypes == 1 && 
     c.Accepted == false && 
     c.DateResponse.HasValue && 
     thirtyDaysAgo <= c.DateResponse.Value) 
    .SingleOrDefault(); 
Powiązane problemy