#c# #asp.net-mvc #linq-to-entities
Вопрос:
Я отправляю записи ASP Awesome Combobox для выпадающего списка с помощью JSON.
Код ниже:
public ActionResult GetEngineerData()
{
var items = db.Results.Where(x=>x.Engineer != null).Select(o=>new KeyContent(o.Engineer,o.Engineer)).Distinct()
return Json(items);
}
Это не дает четкого списка, вместо этого есть много дубликатов.
Я также пытался сделать это (позиционирование отличается перед кодом Select KeyContent):
public ActionResult GetEngineerData()
{
var items = db.Results.Where(x=>x.Engineer != null).Distinct().Select(o=>new KeyContent(o.Engineer,o.Engineer))
return Json(items);
}
Спасибо за любую помощь.
Комментарии:
1. Он извлекает из таблицы около 100 элементов для столбца «Инженер». В этом списке всего около 4 уникальных элементов, но во время выполнения выпадающий список заполняется всеми записями в таблице из столбца «Инженер».
Ответ №1:
при создании a new KeyContent
вы получаете разные экземпляры — разные объекты , даже если их значения одинаковы.
вот почему ваш первый код не работает.
во втором вы проверяете Results
, различны ли они, и для каждого отдельного из них вы выбираете Engineer
.
Если вам нужны отдельные инженеры, попробуйте это:
public ActionResult GetEngineerData()
{
var items = db.Results
.Where(x=>x.Engineer != null) //eliminate empty values
.Select(x=>x.Engineer) //select only the engineer-item
.Distinct() //remove _duplicate engineers_ from the list
.Select(x=>new KeyContent(x,x));//for each unique engineer, create a KeyContent instance
return Json(items);
}
Комментарии:
1. Ваш ответ имеет смысл, но он все равно не работает. Теперь я получаю следующую ошибку: «В LINQ to Entities поддерживаются только конструкторы и инициализаторы без параметров».
2. любопытно, что этого не произошло в вашем исходном коде. попробуйте добавить
.AsEnumerable()
после.Distinct()
3. Я добавил ToList() после выбора(x=>x.Инженер), чтобы обойти проблему с ссылками на сущности, и это исправило ее. Спасибо за вашу помощь!