2016-11-21 2 views
0

Pour obtenir des valeurs distinctes, j'ai besoin d'un IEnumerable.Disitinct Dynamic Linq

var results = gridData.Select(r => r.ExplicitColumnName).Distinct(); 

Pour décider du nom de la colonne à exécution, je dois utiliser un IQueryable tel que requis par System.Linq.Dynamic.

var results = gridData.AsQueryable().Select(columnNameIsInThisVar); 

Je veux que ma méthode pour revenir JSON donc pensé liste de chaînes, puis charger que dans un JsonResult. Mais j'ai des problèmes pour obtenir à la fois des valeurs distinctes et une flexibilité d'exécution sur la colonne.

Donc, je suppose que ma question est, dans LINQ, comment puis-je faire?

List<string> results = $"select distinct {columnName} from ridiculous_table_with_100_columns"; 

Update 1

Selon les commentaires, je l'ai maintenant installé LINQ dynamique en tant que package NuGet mais je ne peux toujours pas convertir à la liste.

filterValues = gridData.AsQueryable().Select(columnName).Distinct(); 

Ce qui me fait "Impossible de convertir implicitement le type 'System.Linq.IQueryable' à 'System.Collections.Generic.List'. Il existe une conversion explicite (vous manque un casting?)"

+0

en ajoutant 'Distinct' à la fin (après' select')? Dynamic LINQ définit 'Distinct' sur' IQueryable'. –

+0

Dynamic Linq ne fournit pas de méthode Distinct. Après la sélection, un IQueryable est renvoyé. Il a besoin d'être converti en IEnumerable mais je ne peux pas penser à un moyen de le faire sans le construire manuellement en itérant sur le IQueryable, auquel cas je pourrais tout aussi bien filtrer les doublons moi-même. – twelveFunKeys

+0

Je vois public IQueryable Distinct (cette source IQueryable); 'inside' System.Linq.Dynamic.DynamicQueryable'. –

Répondre

1

Vous pouvez le faire avec la réflexion

var results = gridData.Select(r => r.GetType().GetProperty(colName).GetValue(r)).Distinct();