我知道如何构造 WHERE 子句,但由于某种原因我无法构造 order by 子句。
IQueryable<ShowList> query = from s in db.ShowList select s;
if (title != null)
{
query = query.Where(s => s.Title == title);
}
这就是事情不对劲的地方。我为用户提供了选择他们想要排序的列以及他/她想要 DESC 还是 ASC 的选项。我认为我在 OrderBy () 内部做错了什么。
“orderBy”变量是来自用户的输入,“order”变量也是来自用户的输入。
“orderBy”应该是列名称,“order”将为“desc”或“asc”
if (orderBy != null && order != null)
{
switch (order)
{
case "asc":
query = query.OrderBy(s => orderBy);
break;
case "desc":
query = query.OrderByDescending(s => orderBy);
break;
default:
query = query.OrderBy(s => orderBy);
break;
}
}
return query.ToList();
谁能告诉我我做错了什么?
最佳答案
OrderBy
的参数方法为 LINQ 提供用于对查询结果进行排序的键。所以基本上你当前正在做的是说对于 orderBy
中包含的所有实体字符串应该用作 key 。因此没有执行真正的排序。
但是最有可能 orderBy
指定应用于排序的属性的名称。如果您不想/不需要使其变得太复杂,您可以使用另一个开关/案例:
Func<ShowList, Object> orderByFunc = null;
switch (orderBy)
{
case "Property1":
orderByFunc = sl => sl.Property1;
break;
case "Property2":
orderByFunc = sl => sl.Property2;
break;
// so on
default:
orderByFunc = sl => sl.Property1;
break;
}
然后,在实际应用排序时:
case "asc":
query = query.OrderBy(orderByFunc).AsQueryable();
break;
case "desc":
query = query.OrderByDescending(orderByFunc).AsQueryable();
break;
关于c# - 如何构造动态 LINQ to Entities ORDER BY 子句?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17029440/