2009-08-19 6 views
2

Je tente de générer une requête LINQ au moment de l'exécution afin que seules certaines propriétés soient sélectionnées. J'ai pensé à quelque chose dans le sens de pouvoir créer une requête en ajoutant des appels .Select() supplémentaires à ma requête ou en utilisant les extensions LINQ dynamiques pour passer une chaîne de colonnes (je voudrais rester loin d'une requête construite en chaîne) . Cependant, mes tentatives actuelles pour trouver une solution n'ont pas fonctionné.Création des propriétés à sélectionner avec LINQ To Object

+0

Pouvez-vous élaborer un peu? Essayez-vous de laisser l'utilisateur passer dans les champs qu'il veut sélectionner? –

+0

L'utilisateur sélectionne exactement les informations qu'il souhaite. – jwarzech

+0

Est-ce que LINQ est une exigence? Je pense que ne pas savoir quels champs vos objets vont avoir rendrait le codage contre les résultats de la requête difficile. Peut-être qu'un retour aux jours de jeux de données serait mieux adapté? –

Répondre

1

Vous devez regarder dans les expressions linq. Voici un petit exemple qui devrait fonctionner pour sélectionner une seule propriété, sélectionner plus que cela devient plus difficile, mais est généralement faisable si vous définissez un type avec les propriétés que vous sélectionnez (par exemple, n'utilisez pas les types anonymes dans les requêtes génèrent).

using System.Linq.Expressions; 
... 


IQueryable<T> query = someQuery; 
Expression expression = query.Expression; 

ParameterExpression obj = Expression.Parameter(query.ElementType, "obj"); 
MemberExpression property = Expression.PropertyOrField(obj, propertyName); 
Expression<Func<T,bool>> lambda = Expression.Lambda<Func<T,bool>>(property, obj); 
query = query.Where(lambda); 

Au moins, thats l'idée générale

+0

Vous avez peut-être raison, il est temps que je plonge dans le fonctionnement des arborescences LINQ Expression. – jwarzech

0

Comme Justin a commenté, votre difficulté sera de trouver un type de retour. L'avantage de LINQ est que vous avez des entités fortement typées avec lesquelles travailler. Si cela ne fonctionne pas à votre avantage, ou si vous faites beaucoup de travail à contre-courant, il y a probablement une meilleure solution.

Questions connexes