私はリポジトリを構築しています。並べ替えのリストを関数に渡して、エンティティを正しい順序で返すことができます。 並べ替え式のリストを使用してクエリ可能なものを並べ替える
は、私が見つけたそのLINQ意志を正しくソートあなたは foreach (var s in sorts.Reverse())
{
query = query.OrderBy(s);
}
しかし、私はそれことがわかっソート方向の追加のテスト中...種類のリストを逆にして、各ソート式のためにORDERBYを使用使用している場合のみ最初の並べ替え方向をとり、各並べ替えでその方向を適用するようです。
private void applySorts(ref IQueryable<TEntity> query, Dictionary<Expression<Func<TEntity, dynamic>>, string> sorts)
{
if (sorts != null)
{
foreach (var s in sorts.Reverse())
{
Expression<Func<TEntity, dynamic>> expr = s.Key;
string dir = s.Value;
if (dir == "d")
{
query = query.OrderByDescending(expr);
}
else
{
query = query.OrderBy(expr);
}
}
}
}
私はもともと最初のソート上のOrderBy使用し、ThenByに切り替えしようとしたが、ThenByはIOrderedQueryableの種類を必要とするので、これは不可能です。
私は辞書の使用が最良ではないかもしれないことに注意したいと思います。より良いアイデアがあれば分かち合いましょう。しかし、私はそれを稼働させ、物事がどのように進むのかを見たいと思っていました。
私はC#、Linq、およびEntity Frameworkを使用しています。
お時間をいただきありがとうございます。
更新:残念ながら、これは数字のソートをサポートしていないことがわかりました。あなたはまたでソート使用することができます
bool first = true;
foreach(var s in sorts)
{
query = first ? query.OrderBy(s) : query.ThenBy(s);
}
// It will became like query.OrderBy(a => a.A).ThenBy(a => a.B).ThenBy(a => a.C)...
:エラー(型に型「可能System.Int32」をキャストすることができません「のSystem.Object」)
私はCompareTo()メソッドを実装するIComparableを継承するカスタムクラスであるキーでSortedDictionaryを使用します。投稿を参照してください:http://stackoverflow.com/questions/4188013/c-sharp-interfaces-how-to-implement-icomparable – jdweng