MVC 5 - Почему мой код linq выбирает весь запрос вместо одного значения? - PullRequest
0 голосов
/ 21 февраля 2019

Вот пример того, как некоторые местоположения выглядят в моей базе данных:

ID, DepartmentId, LocationName

8,2, Главный склад

12,2,Подвал фильтра

Когда я использую следующий код, он захватывает весь запрос и помещает его в качестве значения для моего раскрывающегося списка HTML.

public ActionResult GetLocations(int id)
    {
        List<SelectListItem> locations = new List<SelectListItem>();
        //based on the  input coming to this method ( product id)
        var incident = new AccidentSupervisorViewModel();
        incident.Locations = DB.Locations.ToList().Select(i => new SelectListItem
            {
                Text = i.LocationName,
                Value = i.DepartmentId.ToString()
            }      
        ).Where(i => i.Value == id.ToString());

        var departmentId = from loc in DB.Locations where loc.DepartmentId == id select loc.DepartmentId;

        for (var x = 0; x < incident.Locations.Count(); x++) {
            locations.Add(new SelectListItem {
                Text = incident.Locations.ElementAt(x).Text,
                Value = departmentId.ToString()
            });
        }
        return Json(locations,JsonRequestBehavior.AllowGet);
    } 

enter image description here

Скорее всего, это происходит из-за синтаксической ошибки, но я не использовал linq для запросов, поэтому любая помощь приветствуется.

1 Ответ

0 голосов
/ 22 февраля 2019

Похоже, вы ничего не «сделали» с IQueryable<T>, сгенерированным Linq.Linq генерирует запрос , но ничего с ним не делает, пока IQueryable<T> или другой IEnumerable не будет повторен по .См. Отложенное выполнение и Классификация стандартных операторов запросов по способу выполнения .

В вашем случае, поскольку вы ищете одно значение, вам потребуетсячтобы всплыть в следующей строке после того, как вы впервые объявите departmentId:

var department = departmentId.FirstOrDefault();

Это выскочит первое значение или значение по умолчанию из IQueryable<T>, которое вы сделали.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...