C# - 无法比较数组中的两个元素

时间:2013-07-01 08:06:35

标签: c# linq

这是我的代码:

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

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

distinctDateValues中的值为:

enter image description here

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

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

2 个答案:

答案 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();