这是我的代码:
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的日期列中的值进行排序。
答案 0 :(得分:4)
无需创建匿名类型,在您的情况下,结果distinctDateValues
是匿名类型的列表,而不是DateTime
的列表,您应该获得排序列表DateTime
如下OrderBy
:
var distinctDateValues = dt.AsEnumerable()
.Select(row => row.Field<DateTime>("DAY"))
.Distinct()
.OrderBy(x => x)
.ToList();
此外,您应该使用内置方法Field<DateTime>
,而不是再使用DateTime.Parse
答案 1 :(得分:2)
在这里猜测......你的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();