【发布时间】:2020-05-16 08:30:04
【问题描述】:
过去我们可以使用这样的代码:
public static IOrderedQueryable<TSource> OrderBy<TSource>(this IQueryable<TSource> source, string propertyName)
{
// LAMBDA: x => x.[PropertyName]
var parameter = Expression.Parameter(typeof(TSource), "x");
Expression property = Expression.Property(parameter, propertyName);
var lambda = Expression.Lambda(property, parameter);
// REFLECTION: source.OrderBy(x => x.Property)
var orderByMethod = typeof(Queryable).GetMethods().First(x => x.Name == "OrderBy" && x.GetParameters().Length == 2);
var orderByGeneric = orderByMethod.MakeGenericMethod(typeof(TSource), property.Type);
var result = orderByGeneric.Invoke(null, new object[] { source, lambda });
return (IOrderedQueryable<TSource>)result;
}
按顺序进行,但现在在 EF Core 3.1 中失败
并且在 source.QueryBy(x => EF.Property(x, "Name")) 中使用会导致错误使用 EF.Property 错误,因此我不知道如何避免这些错误并且仍然在 IQueryable 上构建动态表达式尝试。
我做错了什么?
【问题讨论】:
-
如果您还发布查询执行期间发生的实际异常消息会很有帮助
标签: linq entity-framework-core expression-trees