至少有一个对象必须在Min()中实现IComparable

时间:2017-04-19 07:22:41

标签: c# linq

我正在使用以下LINQ获得6 Offer,其中包含Min ListPrice且其OfferCode包含“dtv”但我得到以下异常

  

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

这是我的代码:

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

我做错了什么?

2 个答案:

答案 0 :(得分:2)

问题在于使用Min()功能。因为您使用自己的类(可能)来执行查询,所以Linq需要确切知道如何进行比较以了解List中的哪个对象是Minimum。为此,您必须在IComparable类上实现Offer接口并编写自定义比较方法。

以下是指南 - https://support.microsoft.com/en-ie/help/320727/how-to-use-the-icomparable-and-icomparer-interfaces-in-visual-c

另一个想法(如果您不想沿着IComparable路线前进)将使用OrderBy()对集合进行排序,并指定要用于比较的商品类的属性,然后使用First()在排序后选择列表中的第一个。

答案 1 :(得分:2)

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

您的ListPrice似乎是自定义类型,因此系统无法区分其minmax。您需要在IComparable及其代码中实施ListPrice以删除此错误。