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() メソッドが呼び出されると、実際のデータ取得が行われます。しかし、アクションメソッドからデータを取得することと、ビューが実行されるまでそのままにしておくことの間に実際の違いがあるかどうかの私の質問 (この場合、.tolist() メソッドを削除する必要があります)

4

1 に答える 1

3

Index アクションで .ToList() を削除すると、完全に機能します。IEnumerable に対してループが実行されるたびに、内部的にクエリが実行されます。

ただ、考慮すべき点がいくつかあります。

  1. ビューではなく、コードで例外シナリオを処理することを常にお勧めします。クエリがnullを返すかExceptionをスローする場合、動作中に適切に処理できます。場合によっては、db 接続例外が発生することがあります。
  2. ビューから DB クエリを実行することはお勧めしません。取得したデータに対する通常のリスト/クエリの場合は問題ありません。
  3. 例外のロギングは、ビューよりもアクションの方が簡単です。

したがって、クエリが例外なく常に機能することが確実な場合は、アクションから ToList() を削除できます。ただし、(クエリではなく) データをビューに渡すことを常にお勧めします。

于 2013-07-08T04:48:25.803 に答える