2017-04-19 35 views
0

私はOfferCode「DTV」が含まれているが、私は次の例外少なくとも1つの目的は、分でIComparableをを(実装しなければなりません)

少なくとも一つを取得分ListPriceとを持っている6 Offerを取得するには、次のLINQを使用していますオブジェクトは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はカスタムタイプであるため、システムではminまたはmaxを区別できません。このエラーを取り除くには、ListPriceIComparableとそのコードを実装する必要があります。

2

この問題は、Min()機能の使用にあります。独自のクラス(おそらく)を使ってクエリを実行しているので、LinqはList内のどのオブジェクトが最小であるかを知るための比較方法を正確に知る必要があります。これを行うには、OfferクラスにIComparableインターフェイスを実装し、カスタム比較メソッドを作成する必要があります。 OrderBy()を使用してコレクションを並べ替えることであろうと、あなたが使用したいあなたの提供クラスのプロパティを指定します(あなたがダウンIComparableルート行くにしたくない場合)https://support.microsoft.com/en-ie/help/320727/how-to-use-the-icomparable-and-icomparer-interfaces-in-visual-c

もう一つのアイデア - ここ

ガイドです比較の後に、 First()を使用して、ソート後のリストの最初のものを選択します。

+0

編集のおかげで@MickyD :-) –

+0

あなたは大歓迎です。 :) – MickyD

関連する問題