APIにGetメソッドを実装していて、データベースに対してlinq(Linq to Entity)リクエストを実行しています。
var result = db.SomeEntity
.ToList()
.Select(a => new {a, Rank(a, key})
.Where(obj => obj.Rank > 0));
ここで、Rankメソッドは、のプロパティに基づいて整数を返します。言い換えれば、私はオブジェクトを新しいオブジェクトに関連付けられた評価でラップしています。
APIのGetメソッドなので、非同期にしてlinqクエリを待つと便利です。問題は、Selectの前にToListを呼び出さなければならないため、SelectメソッドをSQLに変換する必要がないことです(Rankメソッドの呼び出しが機能するため)。そのためToListAsync
、Where関数の後で使用できません。
例えば
await (db.Some.....Where(..)).ToListAsync()
どうすればいいのかわからない。助言がありますか?
Where関数の後にToListAsyncを使用できません
DB操作を待つこともできます。操作を括弧で囲むだけで、全体的な結果が正しいタイプになります。
var result = (await db.SomeEntity.ToListAsync())
.Select(a => new {a, Rank(a, key})
.Where(obj => obj.Rank > 0));
逆に、操作全体は2つのステップで実行できます。
var list = await db.SomeEntity.ToListAsync();
var result = list.Select(a => new {a, Rank(a, key})
.Where(obj => obj.Rank > 0));
どちらにしても同じです。Select
そしてWhere
、この場合に何を非同期に行いませんので、待つために他には何もありません。DB操作は、.ToList()
ではなく、で発生してい.Where()
ます。
注:それはだ場合は、すべてで行うことが可能Rank()
LINQツーエンティティ式ツリーのロジックを、それはおそらくより全体的な選択肢となります。ロジックがより複雑になったとしても、カウントがSomeEntity
かなりの量に達すると、パフォーマンス上の利点は明らかです。
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加