2017-11-09 16 views
0

で私は車を取得する方法「AllMakesAsync」を有するデータベースからなる:非同期AsQueryable私のリポジトリ内のリポジトリ

リポジトリに
public async Task<IEnumerable<VehicleMake>> AllMakesAsync() 
    { 
     return await _context.VehicleMakes.ToListAsync(); 
    } 

Iはまた、「AllMakesAsync」法が使用されている「GetVehicleMakesWithPaginationAsync」方法を有します

public async Task<IEnumerable<VehicleMake>> GetVehicleMakesWithPaginationAsync(string search, int? page, string sort) 
    { 
     var makes = await AllMakesAsync(); 

     switch (sort) 
     { 
      case "Name desc": 
       makes = makes.OrderByDescending(x => x.Name); 
       break; 
      default: 
       makes = makes.OrderBy(x => x.Name); 
       break; 
     } 

     if (search == null) 
     { 
      return makes.ToList().ToPagedList(page ?? 1, 5); 
     } 

     return makes.Where(x => x.Name.StartsWith(search, StringComparison.OrdinalIgnoreCase)).ToList().ToPagedList(page ?? 1, 5); 
    } 

データセットでフィルタリングを使用する場合は「ToListAsync()」を使用しないでください。代わりに「AsQueryable」を使用する必要があると言われました。

問題は、AsQueryableを非同期に実装する方法がわかりません。

私はこのような「AsQueryable」を返すことができます。

public async Task<IQueryable<VehicleMake>> AllMakesAsync() 
    { 
     var vehicleMakes = await _context.VehicleMakes.AsQueryable().ToListAsync(); 
     return vehicleMakes.AsQueryable(); 
    } 

が、ここで、それは良くないですので、私は再び「)(ToListAsync」を使用します。

誰かがこれを正しく行う方法を教えてもらえますか?

+2

参照:https://stackoverflow.com/questions/26676563/entity-framework-queryable-async – 12seconds

答えて

-1

あなたはクエリを実行しており、実行を終了して結果を戻した後、クエリの内容、その中の項目、順序などを定義しようとします。あなたはそれをする必要はありません。クエリが何であるかを決定する必要があります(どのフィルタをどのように配置するか、ページ順序など)。ToListAsyncを呼び出してクエリを実行します。

クエリを実行しようとすると、結果が返されますが、実際にはまだ実行されていないクエリが実際には何も実行されていないことを推測してから、実行してください。

関連する問題