2017-06-20 3 views
1

Tenez compte que nous avons cette classe qui est utilisée pour les rapports agrégés:dynamique Linq: Sélectionner un nouvel objet de type connu

public class ReportSeriesData 
{ 
    public string Title { get; set; } 
    public double Value { get; set; } 

    public ReportSeriesData() 
    { 

    } 

    public ReportSeriesData(string Title, double Value) 
    { 

    } 
} 

J'utilise Dynamic Linq aux dossiers de groupe et puis je voudrais sélectionner les résultats dans la liste des ReportSeriesData

var reportData = list.AsQueryable().GroupBy(UserSelectedField, "it").Select("new (it.Key as Title, it.Count() as Value) as ReportSeriesData"); 

L'énoncé ci-dessus produit une erreur:

une exception de type « System.Linq. Dynamic.ParseException » a eu lieu dans System.Linq.Dynamic.dll mais n'a pas été traitée dans le code utilisateur

Informations complémentaires: Erreur de syntaxe

Quelle est la bonne façon de sélectionner un objet de type connu dans LINQ dynamique ?

+0

Juste pour savoir, pourquoi utilisez-vous dynamique LINQ et non "classique" Linq? dans Linq ce genre de requête est assez facile à écrire - peut-être pouvez-vous même les mélanger. – gobes

+0

@gobes J'utilise Dynamic Linq parce que je veux être en mesure de sélectionner un champ à regrouper au moment de l'exécution, de plus le type de données source est également généré lors de l'exécution, donc je ne peux pas utiliser linq classique – jekcom

Répondre

-1

vous pouvez le faire

var reportData = from instance in list 
group instance by instance.UserSelectedField into group 
select new ReportSeriesData() with {.Title = group.Key,.Value = group.Count} 

ou

var reportData=list.AsQueryable().GroupBy(UserSelectedField, "it").Select(g => new ReportSeriesData() 
    { 
     Title= g.Key, 
     Value= g.Count 
    }