1
私は、パフォーマンスを向上させるためにデータを提供するためにサーバー側の処理を使用しているので、大量のデータを含むいくつかのデータセットを持っています。一般的にこれらは絶対にうまく動作します。ただし、テーブルをフィルタリングしようとすると問題が発生します。それは私のLINQ声明のwhere句を尊重するように見えないし、なぜ私は紛失している。JQuery Datatablesサーバー側の処理とフィルター
私のDataTable initisalisationの例の一つは次のようになります。
$('#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;
}
彼らは非常に一貫していないようです。この例のように、正しいパーツ番号を返すことはなく、入力に一致する他の列も返すかどうかはオンとオフです。
入力は常にスペースを含まない1つの単語で、小文字に変換されるため、一致する必要がありますが正しく返されません。
ご協力いただきまして誠にありがとうございます。
多くのありがとうございます!!!!
このコードは、私が修正する必要がある問題です。フィルタリングをしないとデータが正常に返されますが、列によってフィルタリングしようとしているとき – DaRoGa
@ Netの学習者が示唆したことを試しましたか? – markpsmith
私はそれを取り除くことができ、それはすべてのレコードを私に返します。それはポイントではありません。それは、そのコードの列に対してimフィルタリングを行うときに、すべての列を考慮に入れていないということです。 – DaRoGa