【发布时间】:2016-09-22 08:22:10
【问题描述】:
我有几个包含大量数据的数据表,因此我使用服务器端处理来提供数据以提高性能。一般来说,这些工作绝对没问题。但是,在尝试过滤表格时会出现问题。它似乎不尊重我的 LINQ 语句中的 where 子句,我不知道为什么。
我的一个数据表初始化示例如下所示:
$('#link-list').dataTable({
'bServerSide': true,
'sAjaxSource': '@Url.Action("LazyLoadComms", "Communication")',
'bProcessing': true,
async: false,
'aoColumns': [
{
'mDataProp':'Id'
},
{
'mDataProp': 'Customer'
},
{
'mDataProp': 'Receiver'
},
{
'mDataProp': 'PartNo'
},
{
'mDataProp': 'DateOpened'
}
],
bAutoWidth: false,
bLengthChange: false,
pageLength: 10,
'order': [[4, 'desc']]
});
而服务端方法如下:
public ActionResult LazyLoadComms(JqueryDataTableParams param)
{
var communications = _uow.CommunicationService.Get().ToList();
IEnumerable<Communication> filteredComms;
if (!string.IsNullOrEmpty(param.sSearch))
{
filteredComms = communications.Where(c => !string.IsNullOrEmpty(c.Customer.Name) ? c.Customer.Name.ToLower().Contains(param.sSearch.ToLower()) : false
|| !string.IsNullOrEmpty(c.Receiver) ? c.Receiver.ToLower().Contains(param.sSearch.ToLower()) : false
|| !string.IsNullOrEmpty(c.PartNo) ? c.PartNo.ToLower().Contains(param.sSearch.ToLower()) : false);
}
else
{
filteredComms = communications;
}
var sortColumnIndex = Convert.ToInt32(Request["iSortCol_0"]);
Func<Communication, string> orderingFunction = (c => sortColumnIndex == 0 ? c.CommunicationId.ToString() :
sortColumnIndex == 1 ? c.Customer.Name :
sortColumnIndex == 2 ? c.Receiver :
sortColumnIndex == 3 ? c.PartNo :
c.DateOpened.ToLongDateString());
var sortDirection = Request["sSortDir_0"];
if (sortDirection == "asc")
filteredComms = filteredComms.OrderBy(orderingFunction);
else
filteredComms = filteredComms.OrderByDescending(orderingFunction);
var displayedComms = filteredComms
.Skip(param.iDisplayStart)
.Take(param.iDisplayLength)
.Select(c => new
{
Id = c.CommunicationId,
Customer = c.Customer.Name,
Receiver = c.Receiver,
PartNo = c.PartNo,
DateOpened = c.DateOpened.ToShortDateString() + " " + c.DateOpened.ToShortTimeString()
});
var json = Json(new
{
sEcho = param.sEcho,
iTotalRecords = communications.Count(),
iTotalDisplayRecords = filteredComms.Count(),
aaData = displayedComms
},
JsonRequestBehavior.AllowGet);
return json;
}
它们似乎不太一致。在这个例子中,它永远不会返回正确的零件编号,并且会打开和关闭是否返回与输入匹配的其他列。
输入始终是一个不带空格的单词,并被转换为小写,因此它应该匹配但不会正确返回。
非常感谢任何帮助。
非常感谢!!!!
【问题讨论】:
标签: c# jquery linq datatables