0

データが入力され、並べ替えられた動的リストがあります。

List<dynamic> eventList = new List<object>();

            foreach (Task t in tasks)
            {
                eventList.Add(
               new
               {
                   id = "t" + t.TaskID.ToString(),
                   title = t.TaskTitle,
                   start = ResolveStartDate(StartDate(t.Schedule.DateFrom.Value)),
                   end = ResolveEndDate(StartDate(t.Schedule.DateFrom.Value), t.Schedule.Hours.Value),
                   description = t.TaskDescription,
                   allDay = false,
                   resource = t.Schedule.EmployeID.ToString(),
                   color = ColorConversion.HexConverter(System.Drawing.Color.FromArgb(t.Project.Color.Value))
               }
           );
            }

            foreach (Case c in cases)
            {
                eventList.Add(
               new
               {
                   id = "c" + c.CaseID.ToString(),
                   title = c.CaseTitle + "-" + c.Customer.CustomerDescription,
                   start = ResolveStartDate(StartDate(c.Schedule.DateFrom.Value)),
                   end = ResolveEndDate(StartDate(c.Schedule.DateFrom.Value), c.Schedule.Hours.Value),
                   description = c.CaseDescription,
                   allDay = false,
                   resource = c.Schedule.EmployeID.ToString(),
                   color = ColorConversion.HexConverter(System.Drawing.Color.FromArgb(c.Color.Value))
               }
           );

            }

            eventList.OrderBy(p => p.title);

並べ替え呼び出しの前後にデバッグ モードでチェックすると、リストはまったく並べ替えられず、追加された順序になっています。

実行すると、何もソートされていないことがわかります。何が間違っている可能性がありますか?

4

3 に答える 3

2

これが問題です:

eventList.OrderBy(p => p.title);

OrderByそれが既存のコレクションをソートすると仮定しています。そうではありません。順序付けられたシーケンスを返します。その戻り値を無視しているため、ステートメントは役に立ちません。

あなたはおそらく欲しい:

eventList = eventList.OrderBy(p => p.title).ToList();

OrderByどれがこのように機能するかだけではありません。すべてのLINQ シーケンス操作 ( Select、など) はWhereJoin元のコレクションを変更せずに残し、適切に投影され、フィルター処理された (など) データを含むシーケンスを返します。

于 2013-03-06T14:26:08.380 に答える
1

OrderBy元のリストを変更しません。最初のものと同じ要素を使用して新しいものを作成するだけですが、順序は異なります。試す

eventList = eventList.OrderBy(p => p.title).ToList();
于 2013-03-06T14:26:00.460 に答える
0

以下の行は単なるクエリです。

eventList.OrderBy(p => p.title);

つまり、class、struct ステートメントのようなものです。何らかの構造を宣言するだけで、それ以上は何もしません。そのクエリを開始するには、次のように配列またはリストにコピーする必要があります。

var sortedArray = eventList.OrderBy(p => p.title).ToArray();

その後、eventList が繰り返され、要素が配列に書き込まれ、sortedArray 変数に格納されます。

于 2013-03-06T14:27:46.257 に答える