Отчетливо не работает (управление ASP Awesome)

#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.Инженер), чтобы обойти проблему с ссылками на сущности, и это исправило ее. Спасибо за вашу помощь!