我正在尝试按多个标准排序,而我必须返回最昂贵的汽车的Id,如果有多辆汽车具有相同的值,则根据生产日期返回最新的汽车。
public int? Exercise7demo(List<Car> cars)
{
if (cars == null)
{
return null;
}
else
{
List<Car> sorted = cars
.OrderByDescending( x => x.SuggestedRetailPrice )
.ThenBy( x => x.ManufacturedDate )
.ToList();
return sorted.ID;
}
}
它被卡住了,因为我无法理解为什么它不会返回“已排序”。我特意说“无法将类型System.Collections.Generic.List显式转换为'int?'
我错过了什么?请注意,我无法更改公共类型以使其工作,我已经想到了,但这是我正在进行的在线演示课程的一部分,因此这是设置。
编辑:我应该澄清ID是原始定义的,是公共int的一部分吗?声明(对不起,术语可能在这里)。出于某种原因,如果我试图在return语句中调用.ID,它表示它没有定义。那是因为我的List sorted = cars语句吗?谢谢!
答案 0 :(得分:4)
在排序条件之后,您已应用ToList()
,这意味着您仍然可以获得List<Car>
,而不是int
。
您必须将其更改为:
return sorted.FirstOrDefault().ID;
您可能还想检查任何空值,因此:
return sorted.FirstOfDefault()?.ID;
答案 1 :(得分:3)
您可以这样做:
return cars.OrderByDescending(x => x.SuggestedRetailPrice).ThenBy(x => x.ManufacturedDate).FirstOrDefault().ID;
您无需转换为列表。更重要的是,它可能会影响性能(来自MSDN):
ToList(IEnumerable)方法强制立即进行查询评估并返回包含查询结果的List。
因此,建议的方法可以解决您的问题,并使评估保持懒惰。
答案 2 :(得分:1)
你的排序是一个列表。为了返回顶部项目,您可以先使用它将返回第一个值。
试试这个
return sorted.First().ID;
答案 3 :(得分:0)
已排序是卡片列表,但您只需要列表中第一辆车的ID。所以使用:return sorted.First()。ID 它将返回列表中第一辆车的ID。