2014-04-25 5 views
0

J'ai une application MVC avec une grille sur la vue. L'utilisateur est autorisé à filtrer les données sur la grille en utilisant différentes informations. Une façon consiste à utiliser deux datespickers pour la plage de dates (min/max). Je tente de trouver tous les jeux de données correspondants dans la logique métier. Mais pour une raison quelconque, la plage de dates renvoie toujours un ensemble vide. Je sais que je ne l'ai pas codé correctement, mais je ne sais pas quoi changer. Ceci est le code -Entity Framework - Plage de dates

filteredbyCustCriteria = _unitOfWork.CustomerRepository.Get.Where 
(w => (reportSearch.FullName != null ? (w.FirstName + " " + w.LastName).Contains(reportSearch.FullName.Trim()) : true) 
&& (reportSearch.MinPaidDate != null ? EntityFunctions.TruncateTime(w.Orders.FirstOrDefault().OrderPayments.FirstOrDefault().PaymentDate) >= reportSearch.MinPaidDate : true) 
&& (reportSearch.MaxPaidDate != null ? EntityFunctions.TruncateTime(w.Orders.FirstOrDefault().OrderPayments.FirstOrDefault().PaymentDate) <= reportSearch.MaxPaidDate : true)); 

Cela fonctionne trouver sur le nom complet.

Répondre

2

Lorsque je travaille avec nullable DateTime je trouve que je dois utiliser .Value dans certains cas. Essayez ceci:

>= reportSearch.MinPaidDate.Value 
<= reportSearch.MaxPaidDate.Value 
+0

Merci pour les commentaires, mais il n'a toujours pas retourné aucun des documents – Craig

+0

Avez-vous profilées la sortie de SQL pour vous assurer qu'il est logique? BTW, je voudrais écrire le LINQ plus comme ceci '(ReportSearch.MinPaidDate == null || EntityFunctions.TruncateTime (w.Orders.FirstOrDefault(). OrderPayments.FirstOrDefault(). PaymentDate)> = reportSearch.MinPaidDate.Value)' –