可排序的jqGrid使用LINQ到MySQL(的DBLinq)和动态LINQ - ORDERBY不工作 [英] Sortable JqGrid using LINQ to MySQL (DbLinq) and Dynamic LINQ - Orderby doesn't work
本文介绍了可排序的jqGrid使用LINQ到MySQL(的DBLinq)和动态LINQ - ORDERBY不工作的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我有问题,在jqGrid的排序项。排序依据似乎不起作用。我设置code断点,我注意到,那排序依据不改变元素的顺序。任何想法可能是错误的?
我使用LINQ与MySQL(项目的DBLinq)为SQL。
我的行动code:
公众的ActionResult所有(字符串SIDX,串SORD,诠释页,诠释行)
{
。VAR门票= ZTRepository.GetAllTickets()排序依据(SIDX ++ SORD).ToList();
VAR rowdata =(
从门票票
选择新{
I = ticket.ID,
电池=新的String [] {
ticket.ID.ToString(),ticket.Hardware,ticket.Issue,ticket.IssueDetails,ticket.RequestedBy,ticket.AssignedTo,ticket.Priority.ToString(),ticket.State
}
})ToArray的()。 VAR jsonData =新
{
总= 1,//我们将在后面实现
页=页,
记录= tickets.Count(),
行= rowdata
}; 返回JSON(jsonData,JsonRequestBehavior.AllowGet);
}
解决方案
尝试使用以下
公众的ActionResult所有(字符串SIDX,串SORD,诠释页,诠释行)
{
IQueryable的<门票>库= ZTRepository.GetAllTickets();
INT总记录= repository.Count(); //首先排序数据的IQueryable<门票>不转换了ToList()
IQueryable的<门票> orderdData =库;
System.Reflection.PropertyInfo的PropertyInfo =
typeof运算(票).GetProperty(SIDX);
如果(的PropertyInfo!= NULL){
orderdData =的String.Compare(SORD递减,StringComparison.Ordinal)== 0?
(从库点¯x
排序依据propertyInfo.GetValue(X,NULL)降
选择X):
(从库点¯x
排序依据propertyInfo.GetValue(X,NULL)
选择X);
}
//如果你使用的字段,而不是属性,然后可以修改上面的code
//为以下
// System.Reflection.FieldInfo字段信息=
// typeof运算(门票).GetField(SIDX);
//如果(字段信息!= NULL){
// orderdData =的String.Compare(SORD递减,StringComparison.Ordinal)== 0?
//(从库点¯x
//排序依据fieldInfo.GetValue(X,NULL)降
//选择X):
//(从库点¯x
//排序依据fieldInfo.GetValue(X,NULL)
//选择X);
//} 结果//寻呼
IQueryable的<门票> pagedData = orderdData
.Skip((页大于0页面 - 1:0)*行?)
。取(行); //现在既排序和分页select语句是prepared
//我们可以得到数据
VAR rowdata =(从门票票
选择新{
ID = ticket.ID,
电池=新的String [] {
ticket.ID.ToString(),ticket.Hardware,ticket.Issue,
ticket.IssueDetails,ticket.RequestedBy,
ticket.AssignedTo,ticket.Priority.ToString(),
ticket.State
}
})了ToList()。 VAR jsonData = {新
总=页面,
记录=总记录,
总=(总记录+行 - 1)/行
行= pagedData
}; 返回JSON(jsonData,JsonRequestBehavior.AllowGet);
}
在这里,我想,您的机票对象的类型是票务
。
I've got problem with sorting entries in JqGrid. Orderby seem to not work. I set breakpoint in code and I noticed, that orderby doesn't change order of elements. Any idea what could be wrong?
I'm using LINQ to SQL with MySQL (DbLinq project).
My action code:
public ActionResult All(string sidx, string sord, int page, int rows)
{
var tickets = ZTRepository.GetAllTickets().OrderBy(sidx + " " + sord).ToList();
var rowdata = (
from ticket in tickets
select new {
i = ticket.ID,
cell = new String[] {
ticket.ID.ToString(), ticket.Hardware, ticket.Issue, ticket.IssueDetails, ticket.RequestedBy, ticket.AssignedTo, ticket.Priority.ToString(), ticket.State
}
}).ToArray();
var jsonData = new
{
total = 1, // we'll implement later
page = page,
records = tickets.Count(),
rows = rowdata
};
return Json(jsonData, JsonRequestBehavior.AllowGet);
}
解决方案
Try with the following
public ActionResult All(string sidx, string sord, int page, int rows)
{
IQueryable<Ticket> repository = ZTRepository.GetAllTickets();
int totalRecords = repository.Count();
// first sorting the data as IQueryable<Ticket> without converting ToList()
IQueryable<Ticket> orderdData = repository;
System.Reflection.PropertyInfo propertyInfo =
typeof(Ticket).GetProperty (sidx);
if (propertyInfo != null) {
orderdData = String.Compare(sord,"desc",StringComparison.Ordinal) == 0 ?
(from x in repository
orderby propertyInfo.GetValue (x, null) descending
select x) :
(from x in repository
orderby propertyInfo.GetValue (x, null)
select x);
}
// if you use fields instead of properties, then one can modify the code above
// to the following
// System.Reflection.FieldInfo fieldInfo =
// typeof(Ticket).GetField (sidx);
// if (fieldInfo != null) {
// orderdData = String.Compare(sord,"desc",StringComparison.Ordinal) == 0 ?
// (from x in repository
// orderby fieldInfo.GetValue (x, null) descending
// select x) :
// (from x in repository
// orderby fieldInfo.GetValue (x, null)
// select x);
//}
// paging of the results
IQueryable<Ticket> pagedData = orderdData
.Skip ((page > 0? page - 1: 0) * rows)
.Take (rows);
// now the select statement with both sorting and paging is prepared
// and we can get the data
var rowdata = ( from ticket in tickets
select new {
id = ticket.ID,
cell = new String[] {
ticket.ID.ToString(), ticket.Hardware, ticket.Issue,
ticket.IssueDetails, ticket.RequestedBy,
ticket.AssignedTo, ticket.Priority.ToString(),
ticket.State
}
}).ToList();
var jsonData = new {
total = page,
records = totalRecords,
total = (totalRecords + rows - 1) / rows,
rows = pagedData
};
return Json(jsonData, JsonRequestBehavior.AllowGet);
}
Here I suppose that the type of your ticket object is Ticket
.
这篇关于可排序的jqGrid使用LINQ到MySQL(的DBLinq)和动态LINQ - ORDERBY不工作的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文