[英]Why use @model IQueryable<> in the Razor View
在 Razor 视图中使用 @model IQueryable<> 是个好主意吗? 您会在 Razor 视图中使用 @model IQueryable<> 任何合适的场景吗? 我刚刚用旧代码中的 List<> 替换了 IQerable<>。 公司里没有老开发商可问。
@model IQueryable<T>
@{
ViewBag.Title = "Index";
}
<table class="table">
<tr>
<th></th>
<th>Sn</th>
<th>Kind</th>
</tr>
@{
var count = 1;
}
@using (Entities db = new Entities())
{
foreach (var item in Model)
{
<tr>
<td>
<button type="button" class="btn_delKind btn btn-danger" data-kind-id="@item.id">Delete</button>
</td>
<td>@count</td>
<td>
@switch (item.Type)
{
case 0:
@Html.Raw("All")
break;
default:
@Html.Raw(db.LookupType.Find(item.Type).Name)
break;
}
</td>
</tr>
count = count + 1;
}
}
</table>
编辑前:我之前的观点,
收集评论和答案后(感谢那些)
要回答您的问题 -不,没有理由在 view 中使用IQueryable<T>
。
IQueryable<T>
全部目的是提供一种机制,允许您编写 C# 代码,这些代码可以转换为其他程序/工具可以理解的其他形式。 在这种情况下,假设您使用的是实体框架, IQueryable<T>
接口定义了允许实体框架将您的查询从 C# 转换为 SQL 的方法。 这可以使用表达式树来完成。 使用表达式树是IEnumerable<T>
和IQueryable<T>
之间的主要区别。
事实并非如此, IQueryable
使用的内存比IEnumerable
。 使用IEnumerable
您可以将对象保存在内存中,因此您必须为集合中的每个对象分配空间。 IQueryable
定义了查询数据的接口,所以你不需要在内存中存储任何东西。
在您看来,您需要能够遍历您的集合并显示特定的数据集。 要做到这一点, IEnumerable
提供的方法绰绰有余。 在您的视图中使用IQueryable
不会对您有任何好处,但可能会导致很多问题,正如评论中已经提到的那样。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.