2

これは私のコードです:

 var distinctDateValues = dt.AsEnumerable()
                   .Select(row => new
                   {
                       Date = DateTime.Parse(row.Field<string>("DAY"))
                   })
                   .Distinct()
                   .ToList();

 distinctDateValues.Sort(); // getting error on this line

distinctDateValues の値は次のとおりです。

ここに画像の説明を入力

私が得ているエラーは、「配列内の 2 つの要素を比較できませんでした」です。

ここで私が間違っていることを誰かに提案してもらえますか。distinctDateValues の日付列の値を並べ替えたい。

4

2 に答える 2

6

匿名型を作成する必要はありません。あなたの場合、結果distinctDateValues匿名型のリストであり、のリストではありません。次のようなDateTimeソートされたリストを取得する必要があります。DateTimeOrderBy

var distinctDateValues = dt.AsEnumerable()
               .Select(row => row.Field<DateTime>("DAY"))
               .Distinct()
               .OrderBy(x => x)
               .ToList();

Field<DateTime>また、もう1つのステップを使用する代わりに、組み込みメソッドを使用する必要がありますDateTime.Parse

于 2013-07-01T08:09:10.150 に答える
3

ここで推測するだけです...distinctDateValues自分自身を比較する方法がわかりません...実装する必要がありIComparableます...

これを試して:

var distinctDateValues = dt.AsEnumerable()
               .Select(row => DateTime.Parse(row.Field<string>("DAY")))
               .Distinct()
               .ToList();

 distinctDateValues.Sort(); // should not get any errors here...

本当に匿名型を作成したい場合 (たとえば、コードのごく一部しか表示されていない場合)、次のようにしてください。

var distinctDateValues = dt.AsEnumerable()
               .Select(row => new
               {
                   Date = DateTime.Parse(row.Field<string>("DAY"))
               })    
               .Distinct()
               .OrderBy(d => d.Date) // do the sorting here with linq
               .ToList();
于 2013-07-01T08:10:17.323 に答える