如何在通用扩展方法中使用字符串列名称对IQueryable应用OrderBy?

如何在通用扩展方法中使用字符串列名称对IQueryable应用OrderBy?,第1张

如何在通用扩展方法中使用字符串列名称对IQueryable应用OrderBy?

我们在LINQ to SQL项目中做了类似的事情(不是100%相同,但是相似)。这是代码:

public static IQueryable<T> OrderBy<T>(this IQueryable<T> source, string ordering, params object[] values) {    var type = typeof(T);    var property = type.GetProperty(ordering);    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);}

我们实际上并没有使用泛型,我们有一个已知的类,但是它应该在泛型上工作(我已经将泛型占位符放在应该的位置)。

编辑: 对于降序,传递

OrderByDescending
而不是“ OrderBy”:

MethodCallexpression resultExp = expression.Call(typeof(Queryable), "OrderByDescending", new Type[] { type, property.PropertyType }, source.expression, expression.Quote(orderByExp));


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/4962135.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-11-13
下一篇 2022-11-13

发表评论

登录后才能评论

评论列表(0条)

保存