[英]In ASP.Net MVC should I add my where clause to my ienumerable or iqueryable when implementing search?
[英]IQueryable to IEnumerable in ASP.NET MVC 5
這是我的代碼:
控制器:
public async Task<ActionResult> Index()
{
if(User.IsInRole("admin")){
return View(await db.Customers.ToListAsync());
}
else if(User.IsInRole("employee"))
{
var list = from c in db.Customers
where c.User.Id == User.Identity.GetUserId()
select c;
var e = list.AsEnumerable();
return View(e);
//tried this too :
//var list = db.Customers.Where(c=>c.User == User);
//return View(list);
}
return RedirectToAction("Error");
}
查看:
@model IEnumerable<AspnetIdentitySample.Models.ApplicationUser>
<table class="table">
<tr>
<th>
@Html.DisplayNameFor(model => model.UserName)
</th>
</tr>
@foreach (var item in Model)
{
<tr>
<td>
@Html.DisplayFor(modelItem => item.UserName)
</td>
</tr>
}
</table>
為什么我不能在視圖中顯示查詢結果? 任何幫助,將不勝感激! :) 謝謝。
這是由於所謂的延遲執行 。 您正在返回一個IQueryable
實例..但是該實例不保存所需的數據。 它包含一個執行計划,可用於查詢結果。
您需要強制評估查詢。 這樣做的一般方法是調用ToList()
(注意,您已經在if
語句的其他邏輯分支上完成了此操作):
return View(list.ToList());
您的問題(以及它們全部編譯的原因)是因為IQueryable
實現IEnumerable
。 因此,將其傳遞給您的視圖很好。 IList
還實現IEnumerable
..,因此ToList()
強制對IQueryable
評估,並且仍可以傳遞給視圖。
視圖中(在foreach
循環之外)也存在此問題:
@Html.DisplayNameFor(model => model.UserName)
您的模型是一個集合..所以這將無法工作,因為IEnumerable<T>
沒有UserName
屬性(但它的項目具有)。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.