MVC 5 - 为什么我的linq代码选择整个查询而不是单个值?

问题描述 投票:0回答:1

以下是我的数据库中某些位置的示例:

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多查询所以任何帮助是值得赞赏的。

c# asp.net-mvc linq
1个回答
2
投票

看来你没有用Linq生成的IQueryable<T>做任何事情。 Linq生成查询,但在迭代IQueryable<T>或其他IEnumerable之前不会对其执行任何操作。见Deferred ExecutionClassification of Standard Query Operators by Manner of Execution

在您的情况下,由于您要查找单个值,因此在首次声明departmentId后,您需要弹出以下行:

var department = departmentId.FirstOrDefault();

这将从您制作的IQueryable<T>中弹出第一个或默认值。

© www.soinside.com 2019 - 2024. All rights reserved.