我正在尝试使用Expressions构建泛型排序方法。 我提出了以下方法。由于某些原因,当在排序表达式中使用嵌套属性时,代码在语句处断开。
MongoError: server localhost:27017 received an error {"name":"MongoError","message":"read ECONNRESET"}
知道我做错了吗?
答案 0 :(得分:0)
尝试:
private static readonly MethodInfo OrderBy = (from x in typeof(Queryable).GetMethods()
where x.Name == "OrderBy"
let pars = x.GetParameters()
where pars.Length == 2
select x).Single();
private static IQueryable<T> SortQuery<T>(IQueryable<T> query, string sortColumn)
{
if (!string.IsNullOrEmpty(sortColumn))
{
var sortParam = Expression.Parameter(typeof(T), "x");
Expression expr = sortParam;
foreach (var prop in sortColumn.Split('.'))
{
expr = Expression.PropertyOrField(expr, prop);
}
var lambda = Expression.Lambda(expr, sortParam);
var orderBy = OrderBy.MakeGenericMethod(typeof(T), expr.Type);
return (IQueryable<T>)orderBy.Invoke(null, new object[] { query, lambda });
}
return null;
}
您必须使用反射来调用Queryable.OrderBy
。一般来说,转换为object
对于Entity Framework / LINQ to SQL不能很好地工作,所以你可以尝试一下,但它的工作机会很小。