使用下面的代码,在FirstName和LastName上排序没有任何问题,但我也希望能够在Name和Code上进行排序。是否有对属性进行排序的解决方案,而该属性是“复杂对象”而不是原语?
谢谢,
我的目标:
public class Person
{
public Language Language { get; set; }
public string FirstName { get; set; }
public string LastName { get; set; }
}
public class Language
{
public string Name { get; set; }
public string Code { get; set; }
}我有一段代码要分类:
var type = typeof(T);
var property = type.GetProperty("OrderBy");
var parameter = Expression.Parameter(type, "p");
var propertyAccess = Expression.MakeMemberAccess(parameter, property);
var orderByExp = Expression.Lambda(propertyAccess, parameter);
MethodCallExpression resultExp =
Expression.Call(typeof(Queryable),
"OrderBy",
new Type[] { type, property.PropertyType },
source.Expression,
Expression.Quote(orderByExp));
return source.Provider.CreateQuery<T>(resultExp);发布于 2012-09-12 12:34:36
是否有对属性进行排序的解决方案,而该属性是“复杂对象”而不是原语?
当然--基本上您必须创建一个表达式树,该树相当于:
data.OrderBy(p => p.Language.Name)这基本上是两个属性访问表达式,其中一个的“源”是另一个的“结果”。因此,您需要使用您的属性字符串(例如。( "Language.Name"),将其分成几个部分,然后在各个位上迭代,并将当前表达式作为目标。类似于:
Expression parameter = Expression.Parameter(type, "p");
Expression target = parameter;
foreach (string property in propertyParts)
{
target = Expression.Property(target, property);
}
var orderByExp = Expression.Lambda(target, parameter);https://stackoverflow.com/questions/12388021
复制相似问题