我正在尝试运行此查询但它给了我例外。
“至少有一个对象必须实现IComparable。”
我不想按自定义对象排序/区分,而只是按字符串(v.Venue
)排序。但是,使用自定义对象(而不是字符串)的类似查询(未实现IComparable)工作正常。
这是我的查询:
new ObservableCollection<KeyValuePair<int, string>>(
EventsList.Where(p => !string.IsNullOrEmpty(p.Venue))
.Distinct()
.OrderBy(i => i)
.Select((v, index) => new KeyValuePair<int, String>(index, v.Venue))
);
EventsList
是ObservableCollection<EventSchedules>
此外,我尝试将整个查询分解为多个部分,但它仅针对最后一个查询失败:
Select((v, index) => new KeyValuePair<int, String>(index, v.Venue))
答案 0 :(得分:5)
EventList
对象必须实现IComparable
才能执行Distinct()
和OrderBy()
函数。 Linq需要知道如何比较EventList
的实例,以便对它们进行排序并删除重复项。
评论答案: 您可以通过p.Venue订购和区分。即:
new ObservableCollection<KeyValuePair<int, string>>(
EventsList.Where(p => !string.IsNullOrEmpty(p.Venue))
.GroupBy(p => p.Venue)
.Select(grp => grp.First()) // These two lines are lambda way to say Distinct.
.OrderBy(p => p.Venue)
.Select((v, index) => new KeyValuePair<int, String>(index, v.Venue))
);
或者您可以实现自定义比较器。
答案 1 :(得分:0)
根据LINQ基础知识,
如果您使用 EventList ,则必须实施Icomparable以使用不同和排序。
我确信您的查询在OrderbY行中突破,但它显示在Next Line
答案 2 :(得分:0)
我在分析了我的查询后解决了它,我不想像其他人建议的那样对我的自定义对象(EventSchedule)进行排序。我想订购什么&amp; distinct是一个字符串。所以我将我的查询重新排列为:
new ObservableCollection<KeyValuePair<int, string>>(
EventsList.Where(p => !string.IsNullOrEmpty(p.Venue))
.Select(p => p.Venue) //added this
.Distinct()
.OrderBy(i => i)
.Select((v, index) => new KeyValuePair<int, String>(index, v))
);