تحتاج مساعدة في خلق Linq.Expression إلى Enumerable.GroupBy
-
22-07-2019 - |
سؤال
وأنا محاولة إنشاء شجرة التعبير الذي يدعو في نهاية المطاف سلسلة من أساليب GroupBy على نوع Enumerable.
في شكل مبسط أحاول شيئا من هذا القبيل:
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);
والدعوة إلى Expression.Call في نهاية يلقي "لا طريقة" GroupBy "على نوع 'System.Linq.Enumerable" متوافق مع الحجج المقدمة. "
وأنا أفعل شيئا مماثلا، بطريقة مماثلة مع Enumerable.OrderBy
بنجاح، وأنا الحيرة.
وهو محل تقدير أي مساعدة.
المحلول
هل لا تحتاج إلى تمرير امدا في مثل النوع الثاني؟ مثل ذلك.
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)}
}
لا تنتمي إلى StackOverflow