我想获得集合中最小的值,我正在使用LINQ来执行此操作。我在线阅读我可以使用Min(),但我收到错误消息:
At least one object must implement IComparable
这是我的代码
public virtual void GetBestValue(ModelEnergyCalculator ModelEnergyCalculator)
{
ModelTariffQuote ModelTariffQuote = (from q in ModelEnergyCalculator.ModelTariffQuotes
select q).Min();
}
这是我的收藏
- - ModelEnergyCalculator {EnergyHelpline.Model.ModelEnergyCalculator} EnergyHelpline.Model.ModelEnergyCalculator
- ModelTariffQuotes Count = 4 System.Collections.Generic.List<EnergyHelpline.Model.ModelTariffQuote>
- [0] {EnergyHelpline.Model.ModelTariffQuote} EnergyHelpline.Model.ModelTariffQuote
ElectricityUsage 0 decimal
FinalElectricityCost 179.97655091937073972602739726 decimal
FinalGasCost 112.48534432460671232876712328 decimal
GasUsage 0 decimal
InitialElectricityCost 30.0117245403146958904109589 decimal
InitialGasCost 18.757327837696684931506849312 decimal
+ QuoteIssuedDate {01/01/0001 00:00:00} System.DateTime
TariffName null string
TotalCalculatedCost 341.23094762198883287671232875 decimal
+ [1] {EnergyHelpline.Model.ModelTariffQuote} EnergyHelpline.Model.ModelTariffQuote
+ [2] {EnergyHelpline.Model.ModelTariffQuote} EnergyHelpline.Model.ModelTariffQuote
+ [3] {EnergyHelpline.Model.ModelTariffQuote} EnergyHelpline.Model.ModelTariffQuote
+ Raw View
+ ModelTariffs Count = 4 System.Collections.Generic.List<EnergyHelpline.Model.ModelTariff>
如何解决此错误或是否有更好的方法来获取最小值?
答案 0 :(得分:2)
比使用IComparable更简单,更灵活的方法是根据需要订购对象并选择第一个。如果您需要最高,那么您只需要使用OrderByDescending。
var lowest = ModelEnergyCalculator.ModelTariffQuotes
.OrderBy(m => m.GasFinalRate)
.FirstOrDefault();
答案 1 :(得分:0)
您应该告诉编译器如何通过为您的类实现IComparable<T>
接口来比较您的对象。如果您想要属性或字段的最小值,您可以在查询中指定它,如下所示:
ModelEnergyCalculator.ModelTariffQuotes.Select(q => q.GasFinalRate).Min();
或者您可以使用Min
的重载版本:
ModelEnergyCalculator.ModelTariffQuotes.Min(q => q.GasFinalRate);
答案 2 :(得分:0)
要对复杂值的集合使用.Min()
,必须实现IComparable
接口,并指定对象x如何大于或等于对象y。否则,c#无法知道如何比较您的值。
或者您可以使用此yourCollection.Select(x => x.ThePropertyIWantToUseToCompare).Min()
将返回集合中所有项目中最小的ThePropertyIWantToUseToCompare值。
答案 3 :(得分:0)
计算机不知道如何将ModelTariffQuote
与另一个ModelTariffQuote
进行比较。所以找不到最小的对象。您必须通过在ModelTariffQuote
类上实现IComparable接口来定义此比较。您还可以实现通用IComparable<T>
接口。