2

我有以下操作方法:-

public ActionResult Index(string searchTerm=null)
        { 
var accountdefinition = repository.FindAccountDefinition(searchTerm).ToList();
return View(accountdefinition);
 }

以及以下存储库方法:-

public IQueryable<AccountDefinition> FindAccountDefinition(string q)
        {
            return from ad in entities.AccountDefinitions.Include(a => a.SDOrganization)
                   where (q == null || ad.ORG_NAME.ToUpper().StartsWith(q.ToUpper()) )
                   select ad;}

以及视图的以下部分:-

foreach (var item in Model) {
    <tr>
@*        
        <td class="center">
            @Html.DisplayFor(modelItem => item.ORG_NAME)
        </td>

当前,实际的数据检索将在 Action 方法内部调用 .tolist() 方法时发生。但是我的问题是从 Action 方法检索数据或将其保留到执行视图之间是否存在实际差异(在这种情况下,我应该删除 .tolist() 方法)

4

1 回答 1

3

如果您在 Index 操作中删除 .ToList() ,它将完美运行。当一个循环在一个 IEnumerable 上完成时,它会在内部执行查询。

但是有几点需要考虑,

  1. 在代码中处理异常情况总是比在视图中更好。如果查询返回null或抛出Exception,则可以在操作中优雅地处理它。有时可能会发生 db 连接异常。
  2. 不建议从视图运行执行数据库查询。如果对某些检索到的数据进行正常列表/查询是可以的。
  3. 在操作中记录异常比在视图中更容易。

因此,如果您确定查询始终没有异常,您可以从 Action 中删除 ToList()。但始终建议将数据(而不是查询)传递给视图。

于 2013-07-08T04:48:25.803 回答