Linq clause where avec de multiples conditions et null vérifier
Je suis en train de vérifier si une date est nulle dans linq et si elle n'est pas vérifier son une date ultérieure.
QuestionnaireRepo.FindAll(q => !q.ExpiredDate.HasValue || q.ExpiredDate >DateTime.Now).OrderByDescending(order => order.CreatedDate);
J'ai besoin de la deuxième case de n'appliquer que si le premier est vrai. Je suis à l'aide d'un seul modèle de référentiel et FindAll accepté une clause where
Des idées? Il y a beaucoup de questions similaires sur ici, mais pas que donner la réponse, je suis très nouveau pour Linq comme vous pouvez en douter 🙂
Edit: je obtenir les résultats dont j'ai besoin maintenant, mais il sera de vérifier l' > conditionnelle sur les valeurs null dans certains cas. Ce n'est pas une mauvaise chose?
Pouvez-vous ne pas simplement dire où (q.ExpiredDate > DateTime.Maintenant)? Que devez retourner toutes les lignes où le ExpiredDate est une date future.
OriginalL'auteur Andrew | 2010-03-17
Vous devez vous connecter pour publier un commentaire.
Ne sera pas ce travail?
Pouvez-vous préciser les critères exacts vous avez besoin? Votre question dit "vérifier si une date n'est pas nul ... et si elle n'est pas vérifier ses un passé date", ce qui est exactement ce que mon code n' (et le code donné dans tous les autres réponses). Cependant, l'exemple de code dans votre question ne fait pas ça!
Bon point réécrit, désolé 🙂
J'ai mis à jour ma réponse à la suite de votre modifier, cependant mon code est maintenant à peu près la même que la vôtre (qui ressemble, il fait exactement ce que vous dites qu'elle doit faire).
Le
||
opérateur de court-circuits - ce qui est, il évalue seulement la deuxième clause lors de la première clause est faux. Dans votre cas, la deuxième condition sera évaluée uniquement lorsque leExpiredDate
propriété n'est pas null.OriginalL'auteur LukeH
Si c'est Linq-to-Sql et Linq-to-Entités HasValue ne sera pas traduire une Expression SQL et vous aurez une exception.
Cela devrait le faire.
OriginalL'auteur willbt
Il ya un couple de méthodes que vous pourriez faire, une bonne façon est d'utiliser des Tuyaux et des Filtres, mais en regardant la façon dont vous êtes à la mise en œuvre de ce qui précède, il ne semble pas que vous êtes en utilisant ce modèle, afin de ne pas aller en elle, mais sa vaut le googler.
Avec les Tuyaux et les Filtres de modèle que vous pourriez faire ceci:
Et puis juste aller:
QuestionnaireRepo.FindAll().WithExpiryDate().WhereExpiredDateBeforeThanNow().SingleOrDefault();
Vous pourriez tout aussi bien dire:
Espère que cela aide...
OriginalL'auteur Richard