Premièrement, je dois dire que j'ai lu plusieurs postes à ce sujet à Stackoverflow, mais je ne peux pas obtenir le résultat souhaité.
Permettez-moi d'expliquer le contexte (simplifié): J'utilise Linq-to-SQL pour interroger les clients Avec des visites récentes dans le magasin et (éventuellement) ne gagnez que celles avec une certaine quantité de paiements. Supposons avoir un modèle avec des classes de clients, de visites et de paiements. P>
Ainsi, concentrez-vous sur le où code> expression, j'essaye: P> filter = c =>
c.Visits.Any(v => v.VisitDate > DateTime.Now.Date.AddMonths(-(int)visitsSince)))
&& c => c.Payments.Sum(p => p.Quantity) > minPayment.Value;
3 Réponses :
Vous n'abandonnez pas le résultat de Je suppose que la partie respective de votre code devrait lire comme suit: p> La chose est que votre (ou de même que vous avez mentionné) et code> à quoi que ce soit. et code> fonction
@Francd, vous êtes la bienvenu. En passant, j'ai pris ma liberté pour réveiller votre question à la version originale, de sorte que d'autres visiteurs voient quel était le code d'origine réel. Sinon, les réponses ci-dessous n'ont aucun sens.
Découvrez Linqkit et sa classe PredicateBuilder: http://www.albahaari.com/nutshell/ prédicatbuilder.aspx p>
L'utilisation et la mise en œuvre que j'utilise provient de la classe Predicatebuilder et ne fonctionne pas ... Où est l'erreur?
@Francd Il y a une erreur dans votre usage, vois ma réponse.
Le problème est cette ligne: La méthode juste pour clarifier, et code> renvoie un autre délégué que vous n'avez pas affecté à rien. Essayez ceci: p> et code> est une méthode qui prend deux expressions et combine leur logique pour créer une nouvelle expression. Cela ne change pas l'expression, il est exécuté, mais renvoie la nouvelle expression en tant que valeur de retour. Donc dans votre code, vous appelez filter.et (...) code> mais ne faisant rien avec la valeur de retour, donc filtre code> fait toujours référence à l'expression Lambda d'origine. p> p>
P.S., vous devriez utiliser la méthode
expression.andalso () code> pour générer l'expression logique et expression (&& code>).expression.et () code> génère le bit et l'expression (& code>).