mongodb-.net-driver - IMongoQueryable OrderBy 动态属性名称
问题描述
我正在尝试使用属性字符串通过反射来订购我的 IMongoqueryable 集合。
不幸的是,我收到了消息Only fields are allowed in a $sort.
private static void SetOrderBy(ref IMongoQueryable<Trade> trades, BlazorGridRequest request)
{
var prop = typeof(Trade).GetProperty(request.OrderBy);
if (request.OrderByDescending)
trades = trades.OrderByDescending(t => prop.GetValue(t));
else
trades = trades.OrderBy(t => prop.GetValue(t));
}
有人可以帮我弄清楚,我怎样才能让它工作?谢谢!
解决方案
感谢 dododo 的评论,我找到了以下解决方案:
private static void SetOrderBy(ref IMongoQueryable<Trade> trades, BlazorGridRequest request)
{
ParameterExpression pe = Expression.Parameter(typeof(Trade), "t");
MemberExpression me = Expression.Property(pe, request.OrderBy);
Expression conversion = Expression.Convert(me, typeof(object));
Expression<Func<Trade, object>> orderExpression = Expression.Lambda<Func<Trade, object>> (conversion, new[] { pe });
if (request.OrderByDescending)
trades = trades.OrderByDescending(orderExpression);
else
trades = trades.OrderBy(orderExpression);
}
推荐阅读
- spring - 使用spring cloud gateway登录后spring could oauth2重定向到“/”
- python-3.x - discord bot 仅在提及消息时才检测消息
- javascript - 如何将文件从与 index.html 相同的目录上传到元素中通过单击另一个元素的按钮
- angular - 如何在前一个动作或效果的结果决定下一步的情况下瀑布角度动作或效果
- minecraft - 插口/执行
不工作 - python - 覆盖 django admin 的 add_view() 的正确方法
- flutter - 我怎样才能让这个折叠栏与我的谷歌地图一起显示?
- mysql - Node js - Mysql 查询未按编码执行
- python - 烧瓶日期时间:UnboundLocalError:分配前引用的局部变量“日期”
- google-colaboratory - theano.function() 在 Colab 中引发了一个很长的异常