我正在使用以下排序方法:
public static IEnumerable<TEntity> OrderBy<TEntity>(this IEnumerable<TEntity> source, string orderByProperty,
bool desc)
{
string command = desc ? "OrderByDescending" : "OrderBy";
var type = typeof(TEntity);
var property = type.GetProperty(orderByProperty);
var parameter = Expression.Parameter(type, "p");
var propertyAccess = Expression.MakeMemberAccess(parameter, property);
var orderByExpression = Expression.Lambda(propertyAccess, parameter);
var resultExpression = Expression.Call(typeof(Queryable), command, new Type[] { type, property.PropertyType },
source.AsQueryable().Expression, Expression.Quote(orderByExpression));
return source.AsQueryable().Provider.CreateQuery<TEntity>(resultExpression);
}
我的 POCO 对象是这样的:
public class MyEntity
{
.....
[NotMapped]
public virtual int PropertyA
{ get { return something; } }
.....
}
执行时:
context.MyEntities.OrderBy(sort, direction != "ASC").Skip(10).Take(10).ToList();
(请注意,sort 是我排序所依据的字段的名称,在本例中为 PropertyA。)
我的问题是 OrderBy 方法正在引发并且异常说在 LINQ to Entities 中不允许指定类型为“PropertyA”的成员:只允许初始化器、实体成员和导航属性。
有任何想法吗?