System.linq.dynamic.parseexception: 'ожидаемое выражение'
Привет Команда
Я использую DataTables на моем MVC для выполнения обработки на стороне сервера для поиска полей из столбца в столбце моей таблицы из базы данных. В моем классе контроллера создается исключение
// This throws at here on this line. System.Linq.Dyanmic.ExpressionParse.ParsePrimaryStart();
Что я уже пробовал:
<pre> [HttpPost] public ActionResult GetList() { //Server side Parameter. int start = Convert.ToInt32(Request["start"]); int length = Convert.ToInt32(Request["length"]); string searchValue = Request["search[value]"]; string sortColumnName = Request["columns[" + Request["order[0][column]"] + "][name]"]; string sortDirection = Request["order[0] [dir]"]; List<TblEventsManagements> empList = new List<TblEventsManagements>(); using (eNtsaOnlineRegistrationDBContext db = new eNtsaOnlineRegistrationDBContext()) { empList = db.TblEventsManagements.ToList<TblEventsManagements>(); int totalrows = empList.Count; if (!string.IsNullOrEmpty(searchValue)) { empList = empList.Where(x => x.TrainingType.ToLower().Contains(searchValue.ToLower()) || x.TrainingDescription.ToLower().Contains(searchValue.ToLower()) || x.Price.ToString().Contains(searchValue.ToLower()) || x.Venue.ToLower().Contains(searchValue.ToLower()) || x.Facilitator.ToLower().Contains(searchValue.ToLower()) || x.WhoAttend.ToLower().Contains(searchValue.ToLower()) || x.Rsvp.ToLower().Contains(searchValue.ToLower())).ToList<TblEventsManagements>(); } int totalrowsafterfiltering = empList.Count; empList = empList.OrderBy(sortColumnName + " " + sortDirection).ToList<TblEventsManagements>(); // This line thrown the above error empList = empList.Skip(start).Take(length).ToList<TblEventsManagements>(); return Json(new { data = empList, draw = Request["draw"], recordsTotal = totalrows, recordsFiltered = totalrowsafterfiltering }, JsonRequestBehavior.AllowGet); } }
<script> $(document).ready(function () { $("#EventManagementTable").DataTable({ "ajax": { "url": "/Dashboard/GetList", "type": "POST", "datatype":"json" }, "columns": [ {"data": "TrainingType", "name": "TrainingType"}, { "data": "TrainingDescription", "name": "TrainingDescription" }, { "data": "Price", "name": "Price" }, { "data": "Venue", "name": "Venue" }, { "data": "Facilitator", "name": "Facilitator" }, { "data": "WhoAttend", "name": "WhoAttend" }, {"data": "RSVP", "name": "RSVP"}, ], "serverSide": "true", "order":[0,"asc"], "processing": "true", "language": { "processing":"processing... please wait" } }); });
Richard Deeming
Отлаживать свой код и проверить sortColumnName
и sortDirection
переменные, чтобы убедиться, что они содержат ожидаемые значения.
NB: Кажется, у вас есть лишнее место в комнате. sortDirection
линия: так и должно быть Request["order[0][dir]"]
, нет Request["order[0] [dir]"]
.
Вы также слишком увлечены преобразованием данных в список. Игнорирование первоначальной new List<TblEventsManagements>()
задание, которое тут же выбрасывается, вы называете .ToList
четырежды. Это загрузит всю таблицу базы данных в память, а затем скопирует ее несколько раз, прежде чем вернуть результат. Удалить все, кроме последнего .ToList
позвоните, и все будет в порядке. .ToLower
звонки в вашем Where
пункт, и вы должны получить лучшую производительность:
IQueryable<TblEventsManagements> empList = db.TblEventsManagements; int totalrows = empList.Count(); int totalrowsafterfiltering = totalrows; if (!string.IsNullOrEmpty(searchValue)) { empList = empList.Where(x => x.TrainingType.Contains(searchValue) || ... || x.Rsvp.Contains(searchValue)); totalrowsafterfiltering = empList.Count(); } empList = empList.OrderBy(sortColumnName + " " + sortDirection).Skip(start).Take(length); return Json(new { data = empList.ToList(), draw = ... }, JsonRequestBehavior.AllowGet);
phil.o
Виртуальная 5 :)
gcogco10
Ричард, теперь я получаю эту ошибку"нет свойства или поля" asc "существует в типе "TblEventsManagements".
Richard Deeming
Какую динамическую библиотеку LINQ вы используете?
gcogco10
Я не знаю, я думал, что к настоящему времени путем сопоставления этих полей из формата Json на Ajax должна быть ссылка. Теперь я не получаю никакого поля "TrainingTypeasc" не существует. Как я могу исправить эту проблему? Пожалуйста помогите товарищи
Richard Deeming
Это наводит на мысль, что вам не хватает пространства между sortColumnName
и sortDirection
.
gcogco10
Ричард, в чем может быть причина, если мой DataTable не фильтрует данные обратно в список записей? сейчас я испытываю этот вопрос. Спасибо, что указали пробел между sortColumnName и sortDirection.
emreanil
Привет. Могу я спросить вас, нашли ли вы решение? У меня та же проблема, и я пробую решения в течение нескольких дней, но ничего не работает.