2011-11-28 8 views
3

Je veux savoir quel est le meilleur moyen de construire des requêtes dynamiques dans LINQ. Les requêtes seront complexes et imbriquées. Alors que la recherche que j'ai trouvé quelques façons:meilleure façon de construire les requêtes linq dynamiques dans C#?

  1. Linq dynamiques (System.Linq.Dynamic)
  2. constructeur prédicats classe de Albahari
  3. Linq.Expression

Il peut y avoir plus d'options que celles-ci. Quel est le meilleur moyen?

+2

Cela dépend vraiment de vos besoins. Il est sûrement possible d'utiliser ceux-ci. S'il vous plaît dites-nous plus de ce que vous êtes intentions – Polity

+0

Cela pourrait aider: http://stackoverflow.com/questions/1782577/what-is-the-best-approach-to-build-dynamic-linq-queries –

+0

@Polity : D'accord! mais à partir de maintenant, pensez à la nécessité de construire le moteur de recherche basé sur Dynamic Linq. Alors quelle est la meilleure façon ... –

Répondre

1

Cela dépend de votre situation: à quelle vitesse en avez-vous besoin, quel est votre point de départ, etc. Dans un monde sans contrainte, je pense que la meilleure chose est de rouler votre propre bibliothèque pour construire des requêtes dynamiques. Vous pouvez utiliser le travail de Scott ou de Joseph comme source d'inspiration, mais à la fin, tout est "épuisé" dans la bibliothèque Linq.Expression. L'un des avantages de l'approche «faites-le vous-même» est que vous n'avez pas besoin de passer de votre code à celui de quelqu'un. Au lieu de cela, vous codez directement les API .NET. Cela peut être utile lorsque vous avez déjà une représentation de vos requêtes dynamiques, par exemple dans un modèle que vous présentez aux utilisateurs via une interface utilisateur, dans un fichier XML, etc. Tout ce dont vous avez besoin est de parcourir cette représentation de manière récursive. .Linq.Expression comme le retour. FWIW, ma société a adopté cette approche lorsque .NET 3.5 est sorti, et nous sommes très heureux du résultat.

+0

Bien sûr, je prévois de construire la propre bibliothèque pour le même. mais à partir de maintenant reqirement priorité sur haute pour construire le moteur de recherche. Je pense dès maintenant à utiliser rapidement le code source existant pour le même. je voulais savoir quel est le meilleur sur un donné en question ... toutes les corrections et suggessions seront approchables ... –

+0

@RedSwan Si vous avez besoin de construire quelque chose rapidement, Linq.Dynamic devrait faire l'affaire: [il vous permet de construire requêtes à partir de chaînes] (http://stackoverflow.com/questions/848415/linq-dynamic-where-clause) donc tout ce que vous devez fournir est une représentation sous forme de chaîne de votre condition de recherche. – dasblinkenlight

-1

Les requêtes Linq peuvent être écrites de deux façons et vous permettent d'utiliser n'importe quel type d'imbrication.

Syntaxe de requête

IEnumerable<int> numQuery1 = 
     from num in numbers 
     where num % 2 == 0 
     orderby num 
     select num; 

Méthode Syntaxe

IEnumerable<int> numQuery2 = numbers.Where(num => num % 2 == 0).OrderBy(n => n); 

Pour plus d'informations sur LINQ, vous pouvez visiter Microsoft LINQ (Language-Integrated Query). Il contient tout de commencer à des exemples de tutoriels

+0

-1 cela n'a absolument rien à voir avec la question – Jon

+0

@Pankaj: Merci pour la réponse Pankaj. en fait, la réponse donnée par vous n'est vraiment pas liée à la question.je voulais utiliser le moteur de recherche. Je sais comment utiliser orderby et d'autres clauses, mais malheureusement je ne peux pas construire la requête Linq dynamiquement ... –

Questions connexes