C# 使用Linq.Min()-至少一个对象必须实现IComparable

C# 使用Linq.Min()-至少一个对象必须实现IComparable,c#,linq,min,C#,Linq,Min,我希望获得集合中的最小值,我正在使用LINQ来实现这一点。我已在线阅读我可以使用Min,但我收到错误消息: At least one object must implement IComparable 这是我的密码 这是我的收藏 如何修复此错误,或者是否有更好的方法获取最小值 您应该告诉编译器如何通过实现类的接口来比较对象。或者,如果您想指定属性或字段的最小值,可以在查询中指定它,如下所示: ModelEnergyCalculator.ModelTariffQuotes.Select(q =

我希望获得集合中的最小值,我正在使用LINQ来实现这一点。我已在线阅读我可以使用Min,但我收到错误消息:

 At least one object must implement IComparable
这是我的密码

这是我的收藏


如何修复此错误,或者是否有更好的方法获取最小值

您应该告诉编译器如何通过实现类的接口来比较对象。或者,如果您想指定属性或字段的最小值,可以在查询中指定它,如下所示:

ModelEnergyCalculator.ModelTariffQuotes.Select(q => q.GasFinalRate).Min();
或者,您可以使用重载版本的:

要在复杂值的集合上使用.Min,必须实现IComparable接口,并指定对象x如何大于或等于对象y。否则,c无法知道如何比较您的值


或者,您也可以使用此集合。选择x=>x.ThePropertyIwantOuseToCompare.Min将返回集合中所有项目的最小ThePropertyIwantOuseToCompare值。

比使用IComparable更简单、更灵活的方法是根据需要对对象进行排序并取第一个。如果您需要最高值,那么只需要使用OrderByDescending

var lowest = ModelEnergyCalculator.ModelTariffQuotes
    .OrderBy(m => m.GasFinalRate)
    .FirstOrDefault();

计算机不知道如何将一个ModelTariffQuote与另一个ModelTariffQuote进行比较。所以它找不到最小的对象。您必须通过在ModelTariffQuote类上实现接口来定义此比较。您还可以实现通用IComparable接口。

哪个值?ModelTariffQuotes类是如何定义的?您想要最小的电气最终速率还是电气初始速率或气体最终速率???ModelTariffQuote显然不是实现IComparable接口的对象。。。你对如何衡量一个实例是否少于另一个实例有什么期望?对不起,我没有解释清楚。在ModelEnergyCalculator中,我有一组ModelTariffQuotes。我希望在集合中获得计算总成本最低的项我使用此解决方案是因为它易于阅读,并且我不必编写自定义逻辑来比较值。非常感谢。
ModelEnergyCalculator.ModelTariffQuotes.Select(q => q.GasFinalRate).Min();
ModelEnergyCalculator.ModelTariffQuotes.Min(q => q.GasFinalRate);
var lowest = ModelEnergyCalculator.ModelTariffQuotes
    .OrderBy(m => m.GasFinalRate)
    .FirstOrDefault();