我的行动方法中有以下代码来订购我的数据: -
if (String.IsNullOrEmpty(sort))
{
vm = repository.FindVMs(withOutSpace).OrderBy(a => a.Technology.PartialSerial).ToPagedList(page, pagesize);
}
else if(sort == "server_desc")
{
vm = repository.FindVMs(withOutSpace).OrderByDescending(a => a.ITServer.Technology.PartialSerial).ToPagedList(page, pagesize);
ViewBag.ServerSortPam = "server_ans";
}
else
{
vm = repository.FindVMs(withOutSpace).OrderBy(a => a.ITServer.Technology.PartialSerial).ToPagedList(page, pagesize);
ViewBag.ServerSortPam = "server_desc";
}
我已安装Linq.Dynamics
,但我不知道如何替换当前代码以使用动态linq查询,因此我不必为不同的排序参数手动编写单独的orderBY语句。
主要是制作“OrderByDescending(a => a.ITServer.Technology.PartialSerial)
”& “OrderBy(a => a.ITServer.Technology.PartialSerial)
”是根据传递的参数动态生成的,而不是必须编写两个不同的linq查询?
由于
答案 0 :(得分:0)
使用动态linq,OrderBy和OrderByDecending子句看起来像这样:
OrderBy("ITServer.Technology.PartialSerial")
和
OrderBy("ITServer.Technology.PartialSerial DESC").
如果你想摆脱额外的if语句,传递一个标志而不是一个字符串值可能会有所帮助。例如:
IQueryable<SomeEntityType> ApplySort(IQueryable<SomeEntityType> query, bool? sortByPartialAsc)
{
var sb = new StringBuilder();
sb.Append("ITServer.Technology.PartialSerial");
if (sortByPartialAsc == false) sb.Append(" DESC");
return query.OrderBy(sb.ToString());
}
根据视图模型生成排序参数的方式,此方法可能需要进行一些调整,但您应该明白这一点。
如果您感兴趣,我一直在保持Dynamic Linq的最新状态。 https://github.com/NArnott/System.Linq.Dynamic