2017-03-03 21 views
1

私は内のカスタムメソッドをモデルクラスを持っています。私のリポジトリ層では、の利用可能なメソッド(例:ToListAsync())を使用して非同期クエリを実行しようとしています。 LINQ to Entities does not recognize "ToListViewModel()" method [...]:私は次のコードを呼び出すしようとすると、しかし、...非同期操作

Context.Categories.Select(c => c.ToListViewModel()).ToListAsync(); 

コンパイラは、メッセージに文句を言います。

IEnumerableは、このメソッドを実装していないので、私は、ToListAsync()を呼び出すことはできませんが、私は...

Context.Categories.AsEnumerable().Select(c => c.ToListViewModel()) 

...クエリがメソッドをサポートするために次のことを行うことができます。

私のクエリを非同期に保ち、そのメソッドを上記のように呼び出す方法はありますか?何かご意見は?

ありがとうございました!他のすべてのエンティティへのLINQは、実際のSQLステートメントにクエリを変換できるようにしているとして、それが適切に生成することができるので、投影インライン

Context.Categories.Select(c => new CategoryListViewModel { 
      Id = c.Id, 
      Name = c.Name 
     }).ToListAsync(); 

を行い、その後失敗した場合

+0

エンティティクエリへのlinqは、 'Context.Categories.AsEnumerable()'で終了します。それ以降の呼び出しはオブジェクトへのlinqであるため、投影が機能する理由 – Nkosi

+0

**拡張メソッド**であり、ToListViewModelはそうではありません。 –

+0

一般的な方法と拡張方法のどちらでも動作しません。私はそれを動作させるために "AsEnumerable()"を呼び出す場合のみ。しかし、この場合、私は非同期の力を失います。 – Kiwanax

答えて

0

+0

ありがとう、Nkosi!私はモデルオブジェクト内にこのメソッドを持たせて、この投影を再利用可能にしたいと思います。別の提案も同様に表示されるかどうかを見てみましょう。 – Kiwanax

+0

このメソッドは、それ自身の上で再利用することができます。その式をデータソース言語の記述のもとに変換する方法がわからないため、linqからエンティティへの使用はできません。 – Nkosi

関連する問題