0

LINQ に奇妙な問題があります。

合計 8 列のうち、4 列で並べ替える必要があるテーブルがあります。このテーブルの行は時系列です (DateTime 順)。

テーブルの8つの列がA、B、C、D、E、F、G、Hであるとしましょう

F、E、D、B の順にテーブルが必要です

F=>文字列

E=>文字列

D=>文字列

B=>日時

私は次のLINQを書きました-

List<Rows> OrderedListOfRows = listOfRows.OrderBy(i => i.F).ThenBy(i=>i.E).ThenBy(i=>i.D).ThenBy(i=>i.B);

このシーケンスに対して操作を実行し、必要な結果を得ています。ただし、バグに気付きました。

Dのサンプル入力行が「input1」、「input2」、「input3」.....「input10」、「input11」の場合

orderby 関数は、エントリを次のように並べ替えます: "input1"、"input10"、"input11"、"input2"、"input3"... D は文字列であるためです。

ただし、元の順序を維持したい (「input10」、「input11」などがない場合は問題ありません....

どうすればこれを達成できますか?

前もって感謝します

PS私は問題を説明するために最善を尽くしました。他に何かあれば、コメントを残してください。

編集:この問題を解決しました。新しいリストとその列の古いリストを結合して、順序が保持されるようにします。これは、提案された「重複する」質問のいずれにも投稿されていません。

4

2 に答える 2

0

D に予測可能なエントリがある場合は、次のように順序で文字列を解析できます。

List<Rows> OrderedListOfRows = listOfRows
  .OrderBy(i => i.F)
  .ThenBy(i=>i.E)
  .ThenBy(i=>i.D.Substring(0,5))
  .ThenBy(i=>Convert.ToInt16(i.D.Substring(6)))
  .ThenBy(i=>i.B);
于 2013-07-11T22:18:06.337 に答える