Asp.net mvc 用动态Linq替换当前Linq OrderBy
我的操作方法中包含以下代码,以按数据排序:-Asp.net mvc 用动态Linq替换当前Linq OrderBy,asp.net-mvc,linq,asp.net-mvc-4,Asp.net Mvc,Linq,Asp.net Mvc 4,我的操作方法中包含以下代码,以按数据排序:- 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).O
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查询
谢谢使用动态linq时,OrderBy和OrderByDecending子句看起来像这样:
OrderBy("ITServer.Technology.PartialSerial")
及
如果您想摆脱额外的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());
}
IQueryable ApplySort(IQueryable查询,bool?sortByPartialAsc)
{
var sb=新的StringBuilder();
sb.追加(“IT服务器技术部分序列”);
如果(sortByPartialAsc==false)某人追加(“说明”);
返回query.OrderBy(sb.ToString());
}
根据视图模型生成排序参数的方式,此方法可能需要进行一些调整,但您应该了解这一点
我一直在更新Dynamic Linq,以防您感兴趣。
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());
}