2010-08-17 4 views
1

Disons que nous avons une expression:ajout de champs Dynamiquement sélectionnez à l'aide LINQ lambda

var prices = from p in PriceDB.Prices 
      where p.TypeID == 12 
      orderby p.PriceType.Title 
      select p; 

Est-il possible de modifier la liste de sélection?

je l'imagine en regardant quelque chose comme ceci:

var newPriceList = prices.Select(p => p.ExchangeRate); 

Cela peut être une demande étrange, mais dans mon code (ce qui est trop long et complexe pour poster ici) Je veux ajouter conditionnellement champs à la sortie en fonction d'une CheckBoxList.

Je suppose, bien sûr, que je suis en train d'aller à ce dans le mauvais sens ...

+0

Merci pour toute l'aide et les liens. J'ai décidé de réécrire mon code pour extraire les deux ensembles de résultats, pré-filtrés comme ils l'étaient, puis les rejoindre en mémoire. Pour donner une idée un peu plus claire de ce que je faisais: j'ai une table retournant plusieurs résultats et une autre deux table fournissant une liste de valeurs et une liste de types de valeur, respectivement. Je voulais qu'un seul ensemble de résultats soit retourné avec seulement les valeurs des types de valeurs sélectionnés par l'utilisateur. Essentiellement, je pense que j'essayais de faire en sorte que LINQ génère un pivot, mais bon ... –

Répondre

0

Alors que pourrait descendre le chemin dynamique, je considérerais fortement ne pas le faire. Quel est le coût de récupération des valeurs supplémentaires si vous n'en avez pas besoin, dans votre cas particulier? Le problème est-il affiché dynamiquement et vous voulez seulement les afficher dans certains cas? Si oui, je suggère de modifier le code d'affichage en quelque sorte.

Il est difficile de rester fortement typé (ce qui présente divers avantages) tout en étant dynamique en termes de ce que vous allez chercher. Bien sûr, si vous voulez toujours récupérer la même "forme" de données (par exemple toujours une valeur decimal de chaque ligne), alors c'est assez facile - faites-moi savoir si c'est quelque chose que vous aimeriez voir démontré.

Si vous pouviez nous en dire plus sur votre problème, nous pourrions vous proposer des solutions alternatives.

+0

Pour une table de 100 colonnes, la lecture de valeurs redondantes signifie des E/S réseau inutiles. De plus, cela peut également affecter le plan d'exécution de la requête. –

+0

@Hasan: Bien sûr, c'est pourquoi j'ai demandé quel est le coût. Nous ne savons certainement pas que la table a 100 colonnes pour le moment. –

1

J'imagine qu'il recherche quelque chose comme ceci:

En fait, il serait regarde exactement comme ça. Tout d'abord, créez une requête, en sélectionnant l'enregistrement entier. Puis ajouter un select (en utilisant la méthode Select() semble le plus simple) pour limiter la sélection. Linq-to-Sql va trier les deux sélections, et utiliser la reselt appropriée, de sorte qu'il n'y a qu'une sélection dans le SQL final.

Il n'y a pas vraiment de bonne façon de choisir entre plusieurs sélections. J'utiliserais probablement un interrupteur/boîtier.

+0

Avez-vous supprimé votre exemple de code? –

+0

Non. La première ligne est une citation de l'OP, et fait référence au code là. –

Questions connexes