gcogco10 Ответов: 0

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

Привет. Могу я спросить вас, нашли ли вы решение? У меня та же проблема, и я пробую решения в течение нескольких дней, но ничего не работает.

0 Ответов