J'ai un scénario où je dois utiliser une dynamique où condition de Linq.
Je veux quelque chose comme ceci: p> Je sais que nous ne pouvons pas utiliser le "si" au milieu de la requête Linq mais quelle est la solution pour cela? P> S'il vous plaît aider ... p> p>
5 Réponses :
Veuillez consulter le blog complet post: dynamique Requête avec Linq fort>
Il y a deux options que vous pouvez utiliser: p>
Builder de prédicat strong> p> Builder de prédicat fonctionne comme une bibliothèque Dynamic Linq, mais c'est de type sécurisé: p> différence entre la bibliothèque ci-dessus: p>
Le premier exemple semble être retiré du contexte. Quel est le point de vérifier condition code> pour le vide s'il vient d'être attribué
string.empty code>? Je vais corriger ceci maintenant ..
@gaearon - S'il y a plus de condition de condition qui, je mets là ... j'ai déjà posté le lien d'un poste complet où vous pouvez voir les détails
Vous pouvez les méthodes de chaîne:
public void test(bool flag) { var res = employee.Where( x => x.EmployeeName = "Jhom" ); if (flag) { res = res.Where( x => x.EmployeeDepartment == "IT") } var id = res.Select(x => x.EmployeeID ); }
Je ne comprends pas pourquoi le bowvote? Une explication pourrait peut-être m'aider à améliorer ma réponse?
Je crois que ce n'est pas ce qui est demandé. Le problème n'est pas un nom de propriété inconnu mais inconnu (puis-je l'appeler ainsi) 'Chainity'. Votre réponse ne reflète pas la manière dont vous pouvez sélectionner exactement les requêtes avec Dynamic Linq. De plus, votre exemple est faux, car EmailAname code> n'est pas
Employé code> de la propriété, il s'agit d'une chaîne transmise à code> méthode code>.
Et, en dernier point, mais probablement la raison principale du Downvote, est mon opinion subjective que c'est une mauvaise idée. La question n'appelle pas de linq dynamique b>, tout ce qui est nécessaire est une chaîne arbitraire, qui est déjà possible en utilisant des appels de méthode Linq explicite. Le code dynamique et non typographique ne doit être introduit que dans le cas où il est difficile d'obtenir la même chose avec la sécurité de type (E.g. utilisateur entrant dans une expression compliquée dans la zone de recherche). Dynamic Linq vaut mieux que l'analyse mais bien pire que la requête Typeafe qui est très possible et même souhaitable avec cette question. b>
donc, si satisfait que le critère (c'est toujours vrai si le drapeau est faux, etc.), la requête deviendra: P> indicateur code> est
false code> Vous avez besoin de tous les JHOMS, et si
indicateur code> est vrai que vous n'avez besoin que de la JHOMS dans le service informatique Cette condition p>
from e in employee
where e.EmployeeName == "Jhom"
&& (!flag || (e.EmployeeDepartment == "IT")
select e.EmployeeID
C'est le plus simple.
from e in employee where e.Field<string>("EmployeeName") == "Jhom" && (!flag || e.Field<string>("EmployeeDepartment") == "IT") select e.Field<string>("EmployeeID")
Vous pouvez appeler des méthodes LINQ explicitement et les chaîner de manière conditionnelle.
Ce n'est pas vraiment dynamique i>, tout ce que vous avez à faire est d'appeler des méthodes LINQ explicitement et de les chaîner en fonction d'une condition.