私はそうのようにEntity Frameworkのを使用していくつかのデータをretriveing AMでページングを組み合わせる:Entity Frameworkの:動的LINQのOrderBy
var items = GetItems(storeNumber);
Sort(items);
Page(items);
return await items.ToListAsync();
私は、これらのプライベートヘルパーメソッドがあります:
private IQueryable<Item> GetItems(string storeNumber)
{
return _dbContext.Items.Where(x => x.StoreNumber == storeNumber);
}
私はダイナミックを使用して結果をソートしますLINQ。私のページの方法で
private void Sort(IQueryable<Item> items, string fieldToSort, string sortDirection)
{
items = items.OrderBy($"{fieldToSort} {sortDirection}");
}
私は例外
方法を得る「のOrderBy」メソッドの前に呼び出す必要があり、私はその理由と疑っていた
private void Page(IQueryable<Item> items, int skip, int take)
{
items = items.Skip(skip).Take(take);
}
を「スキップ」エラーはアイテムがIOrderedQueryable<Item>
である必要がありますがであるため、を返すダイナミックLINQ OrderByのオーバーロードはありません。 ソートコードとページコードを同じメソッドに抽出して、var
を使用しても問題はなくなったので、その型を推定します。この問題は、並べ替えとページング時にIQueryable
インターフェイスを使用しているようです。このロジックを別々のメソッドに分割する方法もありますが、ソートにはまだ動的LINQを使用していますか?
ご迷惑をおかけして申し訳ありません。
問題ははるかに自明です。現在のところ、 'Sort'メソッドは、クエリー可能な演算子を適用して結果を返さないため、効果がありません(' Page'とLINQメソッドも同様です)。 'IQueryable- 'を返すメソッドに変更することを検討してください。 'private IQueryable
- ソート(...){戻り値items.OrderBy(...); } '。返された結果も使用することを忘れないでください。 –
@IvanStoevメソッドは無効ですが、参照として項目を渡していますか?私は項目を拡張クエリ可能に設定しています。たぶん私は混乱している? – benjrb
オブジェクトへの参照をアイテム(メソッド内のローカル変数)に渡しています。次に、項目(まだローカル変数)を変更して、メソッドを終了します。あなたが望むもの(外側**アイテム**を変更する)を達成するには、 'ref IQueryable- items'を使うか、ローカル変数' items'を返す必要があります。 'return ...'を使うことは、はるかに一般的なアプローチです。 –