2017-06-20 3 views
1

Betrachten wir diese Klasse haben, die für die aggregierten Berichte verwendet wird:Dynamische Linq: Wählen Sie neue Objekt bekannter Art

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

    public ReportSeriesData() 
    { 

    } 

    public ReportSeriesData(string Title, double Value) 
    { 

    } 
} 

Ich benutze Dynamic Linq zu Gruppenbogen und dann würde Ich mag die Ergebnisse in Liste der zur Auswahl ReportSeriesData

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

Die obige Aussage erzeugt einen Fehler:

eine Ausnahme vom Typ ‚System.Linq. Dynamic.ParseException‘aufgetreten in System.Linq.Dynamic.dll wurde aber in Benutzercode

Zusätzliche Informationen nicht behandelt: Syntaxfehler

Was ist der richtige Weg ist zu wählen Objekt bekannter Art in dynamischer Linq ?

+0

nur zu wissen, warum verwenden Sie dynamische Linq und nicht die "klassische" Linq? In Linq ist diese Art von Abfrage ziemlich einfach zu schreiben - vielleicht können Sie sie sogar mischen. – gobes

+0

@gobes Ich benutze Dynamic Linq, weil ich in der Lage sein möchte, ein Feld zur Laufzeit zu gruppieren, außerdem wird der Typ der Quelldaten ebenfalls zur Laufzeit generiert, so dass ich keine klassische linq verwenden kann – jekcom

Antwort

-1

können Sie entweder tun dies

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

oder

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