0

誰かが Troy Goode の非常に優れたPagedList を使用したことを願っていますか? 私は実際にWinformsアプリでそれを使用していますが、機能している間、ソートする能力を失いました.

PagedList を返し、Page と Size を制御し、DataGridView にバインドすることは問題ではありませんが、私の最大の関心事は並べ替えです。今、私はMuhammad Mosa による SortedPageList にも遭遇しましたが、パラメーター要件の 1 つと本当に混乱しています。プライベート メソッドを使用して SortedPageList を返していますが、以下のコードが機能していないようです。

private SortedPagedList<Location, Location> GetInactiveLocationData(int Index, int Size) {
    sysDataContext ctx = new sysDataContext();
    try {
        var query = ctx.Location.Where(x => x.Active == false).AsQueryable();
        return query.ToPagedList(Index, Size, i => i, false);          
        //return new SortedPagedList<Location, Location>(query, Index, Size, i => i , true);
    }
    catch (Exception) {
        throw;
    }
}

これにより、エラー " " がスローされますCannot order by type: Location。明らかに、ユーザーが列ヘッダーをクリックしてその列でソートする場合を処理したいと思います。

ソリューションには、私が持っている知識レベルを超えるラムダ式が含まれていることを知っています (認めるのは恥ずかしいことです)。上記のアドバイスをいただければ幸いです!

ありがとう!

4

2 に答える 2

0

基本的な LINQ 操作を学習することから始めることができます(「順序付け」部分までスクロールします。または、こちら: LINQ パート 1 - オブジェクト リストのフィルタリングと並べ替え.

魔法を発見したら、あなたは飛ぶでしょう:P

于 2009-11-28T09:59:59.757 に答える
0

わかりました、私はばかのように感じます!...まあ、やや! 私は次のように動作しました:

using (sysContext ctx = new sysDataContext()) {
    try {
        var data = ctx.Location.Where(x => x.Active == false).AsQueryable();
        var query = data.ToPagedList(PageIndex, PageSize, o => o.DueDate, true);
        dgv.DataSource = query;
    }
    catch (Exception) {
        throw;
    }
}

ここで、ソート式は として記述されo => o.DueDateます。これは素晴らしいことです。これは機能しますが、次のことを可能にする汎用関数を作成する方法を見つけようとしています。

  1. どの列ヘッダーがクリックされたかを検出します (おそらく switch ステートメントを使用)
  2. その型を適切な Linq Entity プロパティに変換します
  3. そのプロパティをジェネリック メソッドに渡す

次のようなメソッド:

private void RefreshData([type] SortExpression, bool Ascending, int PageIndex, int PageSize) {
    using (sysDataContext ctx = new sysDataContext()) {
        try {
            var data = ctx.Location.AsQueryable();
            var query = data.ToPagedList(PageIndex, PageSize, o => o.[SortExpression], Ascending);
            dgv.DataSource = query;
        }
        catch (Exception) {
            throw;
        }
    }
}

これは可能ですか?

さらに1つ(それが私を助けるのに役立つ場合)、SortedPageListメソッドは次のようになります。

public static SortedPagedList<T, TResult> ToPagedList<T, TResult>(this IQueryable<T> source, int index, int pageSize, System.Linq.Expressions.Expression<Func<T, TResult>> keySelector, bool asc) {
    return new SortedPagedList<T, TResult>(source, index, pageSize, keySelector, asc);
}

System.Linq.Expressions.Expression<Func<T, TResult>>パラメータとして渡すことができる型として表現するにはどうすればよいですか?

于 2009-11-28T12:18:36.767 に答える