LINQ group by-Abfrage verwenden reflektiert Eigenschaft name
Will ich füllen Sie ein drop-down mit den öffentlichen Eigenschaften eines bestimmten Objekts, das habe ich fein gemacht. Aber jetzt, wenn der Benutzer wählt den Wert aus dem dropdown, ich will es zu der Gruppe der DB-Tabelle, die Ergebnisse nach dieser Spalte. Ich habe versucht mit LINQ, aber ich kann nur herausfinden, wie man explizit die Gruppe durch eine Instanz-Variablen-Eigenschaft, die nicht durch eine Reflexion Eigenschaft. Das ist meine Methode - der parameter ist der string, der den Namen der Eigenschaft an. ZB, es wird "Land", wenn der Nutzer will, um group by Kunde.Land, es wird "State", wenn der Nutzer will, um group by Kunde.Zustand. Aber im moment muss ich hart codiert Gruppe von "Staat", da ich nicht herausfinden, wie die Verwendung der string-Wert übergeben, mit meiner LINQ-Abfrage
private void DisplayReportAction(string category)
{
if (!string.IsNullOrEmpty(category))
{
SelectedCategory = category;
_summaries.Clear();
foreach (var custGroup in _customerInterface.CustomerInterface.GetAllCustomers().GroupBy(c => c.State)
.Select(group => new
{
Category = group.Key,
Count = group.Count()
})
.OrderBy(x => x.Category))
{
_summaries.Add(new CustomerReportSummaryViewModel(custGroup.Category, custGroup.Count));
}
ReportVisibility = Visibility.Visible;
}
}
Du musst angemeldet sein, um einen Kommentar abzugeben.
Können Sie mithilfe von Reflektion, wenn Sie mit LINQ to Objects, zum Beispiel diese:
Wenn Sie mithilfe von Linq To Sql dann eine alternative ist die Verwendung von dynamischen Abfragen, prüfen Sie diesen link
http://weblogs.asp.net/scottgu/archive/2008/01/07/dynamic-linq-part-1-using-the-linq-dynamic-query-library.aspx
Können Sie bauen-Ausdruck dynamisch:
Und schließlich rufen
EDIT:
Gut, sorry, Sie noch haben, um zu wissen, die Art der Immobilie zu geben, T-Typ-parameter zu
buildExpression
FunktionGibt es Möglichkeiten, dies zu tun, zum Beispiel
GetProperty(category).PropertyType
und rufen Sie dannMakeGenericMethod
aufGetType().GetMethod("buildExpression<>")
, aber dies erfordert ein wenig mehr Arbeit.Wie auch immer, Sie müssen einen Weg finden, zu bauen
CustomerReportSummaryViewModel
von diesem Typ.Ich weiß nicht, Ihren Fall, aber Sie vielleicht alle Kategorien Eigenschaften sind von der gleichen Art, so könnte man hard-code ?
Wenn Sie interessiert sind, und nicht finden können, eine richtige Weg, es zu tun lassen Sie mich wissen, ich werde versuchen, schreiben Sie eine passende Lösung.