Benötigen Sie Hilfe bei Linq.Expression zu Enumerable.GroupBy Schaffung
-
22-07-2019 - |
Frage
Ich bin versucht, einen Ausdruck Baum zu erzeugen, die letztlich eine Reihe von GroupBy Methoden auf dem Enumerable Typ nennt.
In vereinfachter Form ich so etwas wie dies bin versucht:
IEnumerable<Data> list = new List<Data>{new Data{Name = "A", Age=10},
new Data{Name = "A", Age=12},
new Data{Name = "B", Age=20},
new Data{Name="C", Age=15}};
Expression data = Expression.Parameter(typeof(IEnumerable<Data>), "data");
Expression arg = Expression.Parameter(typeof(Data), "arg");
Expression nameProperty = Expression.PropertyOrField(arg, "Name");
Expression group = Expression.Call(typeof(Enumerable), "GroupBy", new Type[] { typeof(Data), typeof(string) }, data, nameProperty);
Der Aufruf am Ende Expression.Call wirft „Keine Methode‚GroupBy‘auf Typen‚System.Linq.Enumerable‘ist kompatibel mit den mitgelieferten Argumenten.“
Ich mache eine ähnliche Sache, in ähnlicher Weise mit Enumerable.OrderBy
erfolgreich und bin ratlos.
Jede Hilfe ist willkommen.
Lösung
Sie brauchen nicht einen Lambda-in als zweiter Typ passieren? wie so.
public void Test()
{
IEnumerable<Data> list = new List<Data>
{
new Data{Name = "A", Age=10},
new Data{Name = "A", Age=12},
new Data{Name = "B", Age=20},
new Data{Name= "C", Age=15}
};
var data = Expression.Parameter(typeof(IEnumerable<Data>), "data");
var arg = Expression.Parameter(typeof(Data), "arg");
var nameProperty = Expression.PropertyOrField(arg, "Name");
var lambda = Expression.Lambda<Func<Data, string>>(nameProperty, arg);
var expression = Expression.Call(
typeof(Enumerable),
"GroupBy",
new Type[] { typeof(Data), typeof(string) },
data,
lambda);
//expected = {data.GroupBy(arg => arg.Name)}
}
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow