PROBLÈME RÉSOLU !!!Commander LINQ par "string" name
La solution est Linq.Dynamic
Vous le faites comme ceci:
(from c in Context.AccountCharts
where c.Account_FK == account && c.Year_FK == year select c).OrderBy(order);
Vous devez télécharger le System.Linq.Dynamic.dll et l'inclure dans votre projet.
Existe-t-il un moyen de commander une requête linq par le nom d'un champ. comme ceci:
from c in Context.AccountCharts
where c.Account_FK == account && c.Year_FK == year
orderby c["ColName"] select c;
Ou
from c in Context.AccountCharts
where c.Account_FK == account && c.Year_FK == year
orderby c.GetType().GetField("ColName") select c;
Aucune de ces deux œuvres, mais je l'espère vous une façon de le faire.
Vous voulez trier l'ensemble table, basé sur un champ qui peut changer rangée par rangée? c'est-à-dire, si ColName est "Account_FK" dans la première ligne, et "Year" est la deuxième ligne, par quelle colonne voulez-vous le trier? –
Vous essayez donc d'utiliser la réflexion dans une requête LINQ? Que se passe-t-il si vous optez pour 'orderby c.GetType(). GetField (" ColName "). GetValue (c)'? –
@ James, @Anon, je pense qu'il veut simplement que le 'orderby' soit variable plutôt que codé en dur. Donc, dans un cas, il veut trier sur ColumnA, un autre ColumnB, et préfèrerait ne pas écrire plusieurs fonctions qui ne diffèrent que sur la ligne 'orderby'. Si c'est le cas, son utilisation du terme 'field' est regrettable, car cela implique une variable de membre privé plutôt qu'une colonne dans une base de données. –