3

linq の初心者です。1 つのシナリオで立ち往生しています。つまり、

ユーザー入力に基づいて検索結果を並べ替える必要があります。

ユーザー入力は姓、名、役職です。入力3のドロップダウンがあり、選択した値に基づいて結果をソートする必要があります。

私は試した

order = Request["orders"].Split(',');

                var param = order[0];
                var p1 = typeof(Test).GetProperty(param);
                param = order[1];
                var p2 = typeof(Test).GetProperty(param);
                param = order[2];
                var p3 = typeof(Test).GetProperty(param);


model.Test = (from tests in  model.Test
                   select tests).
            OrderBy(x => p1.GetValue(x, null)).
            ThenBy(x => p2.GetValue(x, null)).
            ThenBy(x => p3.GetValue(x, null));

しかし、うまくいきません。

こんなqryが欲しい

from tests in  model.Test
select tests).OrderBy(x => x.lastname).
ThenBy(x => x.firstname).ThenBy(x => x.Title);

order[0]== lastname but how can i use it in the place of OrderBy(x => x.order[0])..?

前もって感謝します。

4

3 に答える 3

4

私は次のように私のケースを解決しました // ソートに使用される列のリスト

 List<string>order = Request["orders"].Split(',').ToList();

//列文字列をプロパティにマップします

var mapp = new Dictionary<string, Func<Test, string>>
            {
                {"FirstName", x => x.FirstName},
                {"LastName", x => x.LastName},
                {"SimpleTitle", x => x.SimpleTitle}

            };

// ユーザーが入力した順序

var paras = new List<Func<Test, string>>();
            foreach (var para in order)
            {
                if(!string.IsNullOrEmpty(para))
                paras.Add(mapp[para]);
            }

//sorting
            model.Test= model.Test.OrderBy(paras[0]).ThenBy(paras[1]).ThenBy(paras[2]);

皆さんありがとう、

于 2013-01-15T11:14:57.460 に答える
1

実際には、動的LINQを試すことができるよりも動的linqクエリを探しています(パート1:LINQ動的クエリライブラリの使用)

このようにすることができます

ここに画像の説明を入力してください

これは、文字列propertynameを動的に渡して、orderby関数でコレクションを短縮できることを意味します。

についても読むことができます:Linqを使用した動的クエリ

于 2013-01-15T07:10:22.077 に答える
0

式(任意Expression)をピースから手動で作成し、それをクエリの前の部分に追加できます。詳細については、「列名として文字列を使用したIQueryableでの並べ替え」などを参照してください。

于 2013-01-15T08:07:20.613 に答える