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 中的值是:

在此处输入图像描述

我得到的错误是“无法比较数组中的两个元素”。

任何人都可以建议我在这里做错了什么。我想对 distinctDateValues 的日期列中的值进行排序。

4

2 回答 2

6

无需创建匿名类型,在您的情况下,结果distinctDateValues匿名类型列表,而不是 列表DateTime,您应该得到如下排序DateTime列表OrderBy

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

此外,您应该使用内置方法,Field<DateTime>而不是使用更多步骤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 回答