2017-04-19 101 views
0

我使用下面的LINQ得到6 Offer有民ListPrice,其OfferCode包含“数字电视”,但我得到下面的异常至少一个对象必须在MIN()实现IComparable

至少一个对象必须实现IComparable。

这里是我的代码:

List<Offer> dtvOffers = 
     offerList.Where(x => (x.ListPrice == offerList.Min(y=>y.ListPrice)) && 
         (x.OfferCode.ToLower().Contains("dtv"))) 
     .Take(6) 
     .ToList(); 

我在做什么错?

+0

什么是ListPrice属性的类型?它实现了“IComparable”吗? –

+0

“ListPrice”是什么类型。 –

回答

2

这里的问题是offerList.Min(y => y.ListPrice)

看起来您的ListPrice是一种自定义类型,因此系统无法区分它的minmax。您需要在ListPrice及其代码中执行IComparable以删除此错误。

2

问题在于使用Min()函数。因为您正在使用自己的类(可能)执行查询,所以Linq需要知道如何进行比较才能知道List中的哪个对象是最小值。为此,您需要在Offer类上实现IComparable接口并编写自定义比较方法。

这里有一个指南 - https://support.microsoft.com/en-ie/help/320727/how-to-use-the-icomparable-and-icomparer-interfaces-in-visual-c

另一个想法(如果你不想下去IComparable路线)将使用OrderBy()排序的收集和你的建议类指定属性,您要使用比较,然后使用First()在排序后选择列表中的第一个。

+0

感谢编辑@MickyD :-) –

+0

非常受欢迎,您好,先生。 :) – MickyD

相关问题