【问题标题】:Execute OrderBy with parameter [duplicate]使用参数执行 OrderBy
【发布时间】:2022-01-12 06:07:16
【问题描述】:

我正在创建一个端点以从我的数据库中检索一些数据,我正在尝试在我的前端按功能创建一个自定义订单,以便我可以使用以下方式调用我的端点:

https://someapiurl/api/v1/controller/GetItems?ID=1&OrderBy=Name desc

这是我在端点中的代码:

//This is an example of how I populate my variable which works fine (I have the elements from the database). List is a Iqueryable<ModelName> object.
var list = dbContext.SomeEntity.FindAll...

//Code to get "Name" instead of "Name desc"
var param = orderByQueryString.Split(' ')[0];

if (orderByQueryString.Contains("asc"))
    return list.OrderBy(x => param);
else
    return list.OrderByDescending(x => param);

通过两次返回,我将按升序排列我的列表。但如果我执行以下代码:

return list.OrderBy(x => x.Name);

或者

return list.OrderByDescending(x => x.Name);

两者都可以正常工作,所以我的问题是,我该怎么做才能在该代码中动态地使用 orderby 元素,因为有时我会发送 Name,有时会发送 Id 或 CreatedDate 或类似的东西。

顺便说一句...我尝试使用 list.OrderBy(param);但我得到了无法从用法错误消息中推断出方法“方法”的类型参数。

【问题讨论】:

  • 我收到了无法使用重复问题中答案中的代码翻译的错误消息。我使用 Linq.Dynamic nuget 包解决了这个问题。现在我可以调用 OrderBy("param desc")

标签: c# list linq iqueryable


【解决方案1】:

改用这个

x => x.GetType().GetProperty(param).GetValue(x, null)

【讨论】:

  • 我尝试了您的代码,但返回此错误消息:无法翻译。以可翻译的形式重写查询,或通过插入对“AsEnumerable”、“AsAsyncEnumerable”、“ToList”或“ToListAsync”的调用显式切换到客户端评估
  • 检查这个工作示例并与您的实现进行比较dotnetfiddle.net/BwYx6I
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-01-10
  • 1970-01-01
  • 2020-01-31
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多