1

何百もの列を持つテーブルがあります (FirstNameや などLastName)。

このすべてのデータはGridViewwith リストとして表示されます。をSortCommand持つイベントを使用しましたが、ラムダ式を入力した後e.SortExpression、関数で使用する方法がわかりません。OrderByIntelliSense は、必要な列 (実行時にのみ表示される列) ではなく、数百の列をすべて表示します。

Func<TSource, TKey>関数が期待するセレクターを使用して、文字列がソートする必要がある列であるOrderByことを知らせるにはどうすればよいですか?e.SortExpression

私が本質的に意味することの例:

private void dataGrid_SortCommand(object source, DataGridSortCommandEventArgs e)
{
    var users = new UsersEntities().UsersTable.OrderBy(x => "x."+e.SortExpression);
    FillDataGrid(users); 
}

更新:これを達成しようとしている方法は式ツリーを使用することであることがわかりました。誰かが正確な解決策を提供してくれることを願っています。

更新 2:ここで解決策を見つけました。私の質問は重複していて、それに加えて、言葉遣いが悪いことがわかりました。みんなありがとう。

また、ken が動的リンクを使用する必要があるというかなりひどい証拠を提供していることにも気付きました。将来的にはそうすることを検討しますが、ライブラリに依存するよりも式ツリーを試してみることの楽しさに気付かずにはいられませんでした。この段階では、私はまだ Expression ツリーに慣れていないので、これを利用する絶好の機会です。

4

2 に答える 2

0

where 句に論理 AND のみが含まれている限り、LINQ 式を動的に簡単に作成できます。Where句を繰り返すだけです!

// Filter
var query = new UsersEntities().UsersTable.Select(x => x);
if (!String.IsNullOrEmpty(nameFilter) {
    query = query.Where(x => x.Name == nameFilter);
}
if (!String.IsNullOrEmpty(zipFilter) {
    query = query.Where(x => x.Zip == zipFilter);
}

// Sorting
switch (sortField)
{
    case "Name":
        query = query.OrderBy(x => x.Name);
        break;
    case "Zip":
        query = query.OrderBy(x => x.Zip);
        break;
}

式ツリーを動的に作成することもできますが、これはあまり明白ではありません。

于 2013-04-11T14:15:56.840 に答える