2013-10-04 68 views
3

我想運行這個查詢,但它給了我例外。這個LINQ查詢有什麼問題?

「至少有一個對象必須實現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)) 
); 

EventsListObservableCollection<EventSchedules>

而且,我試圖打破了整個查詢成片,但它不僅不能爲這最後詢問:

Select((v, index) => new KeyValuePair<int, String>(index, v.Venue))

+2

什麼是'EventsList'?您嘗試命令它,但它不實施'IComparable',所以它不知道如何。 – CodingIntrigue

+0

@RGraham它的一個ObservableCollection Ankit

+3

「但是,與自定義對象(而不是字符串),不實現IComparable,類似的查詢工作正常。」我非常懷疑它。你如何期待兩個'EventSchedule'對象的排序比較?你是否真的想按場地訂購? –

回答

0

我解決它分析我的查詢後,我不想排序我的自定義對象(EventSchedule)正如其他建議。我想要訂購& 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)) 
); 
5

EventList對象必須執行IComparable以便e xecute Distinct()OrderBy()函數。 Linq需要知道如何比較EventList的實例,以便對它們進行排序並刪除重複項。

評論回答: 您可以按p.Venue進行排序並區分。 I.e .:

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)) 
); 

或者你也可以實現自定義比較器。

+0

我該怎麼做,它的ObservableCollection – Ankit

+0

@ ay89,是的,但他不是在談論ObservableCollection,但關於EventList對象..... – walther

+0

我們確定它不是需要實現IComparable的EventSchedules嗎? – Gusdor

0

按照LINQ基礎,
如果您正在使用EVENTLIST你必須實現IComparable使用不同排序依據

我相信你的查詢是在排序依據斷行,但它顯示了在下一行