以下是我的数据库中某些位置的示例:
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);
}
这很有可能发生,因为我有一个语法错误,但我没有使用linq多查询所以任何帮助是值得赞赏的。
看来你没有用Linq生成的IQueryable<T>
做任何事情。 Linq生成查询,但在迭代IQueryable<T>
或其他IEnumerable
之前不会对其执行任何操作。见Deferred Execution和Classification of Standard Query Operators by Manner of Execution。
在您的情况下,由于您要查找单个值,因此在首次声明departmentId
后,您需要弹出以下行:
var department = departmentId.FirstOrDefault();
这将从您制作的IQueryable<T>
中弹出第一个或默认值。