11
votes

Dynamique où condition dans linq

J'ai un scénario où je dois utiliser une dynamique où condition de Linq.

Je veux quelque chose comme ceci: xxx

Je sais que nous ne pouvons pas utiliser le "si" au milieu de la requête Linq mais quelle est la solution pour cela?

S'il vous plaît aider ...


1 commentaires

Ce n'est pas vraiment dynamique , tout ce que vous avez à faire est d'appeler des méthodes LINQ explicitement et de les chaîner en fonction d'une condition.


5 Réponses :


11
votes

Veuillez consulter le blog complet post: dynamique Requête avec Linq

Il y a deux options que vous pouvez utiliser:

bibliothèque Dynamic Linq xxx

Builder de prédicat

Builder de prédicat fonctionne comme une bibliothèque Dynamic Linq, mais c'est de type sécurisé: xxx

différence entre la bibliothèque ci-dessus:

  • PredicateBuilder permet de construire TypeAsafe Dynamic requêtes .
  • La bibliothèque Dynamic Linq permet de construire des requêtes avec dynamique dynamique et des clauses commandes spécifiées à l'aide de chaînes .

2 commentaires

Le premier exemple semble être retiré du contexte. Quel est le point de vérifier condition pour le vide s'il vient d'être attribué string.empty ? 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



2
votes

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 );
}


3 commentaires

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 n'est pas Employé de la propriété, il s'agit d'une chaîne transmise à méthode .


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 , 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.



9
votes

donc, si 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> xxx pré>

satisfait que le critère (c'est toujours vrai si le drapeau est faux, etc.), la requête deviendra: P>

from e in employee    
where e.EmployeeName == "Jhom"
  && (!flag || (e.EmployeeDepartment == "IT")
select e.EmployeeID


1 commentaires

C'est le plus simple.



0
votes
from e in employee    
where e.Field<string>("EmployeeName") == "Jhom" &&
(!flag || e.Field<string>("EmployeeDepartment") == "IT")
select e.Field<string>("EmployeeID") 

0 commentaires

0
votes

Vous pouvez appeler des méthodes LINQ explicitement et les chaîner de manière conditionnelle. XXX


0 commentaires