我面临排序列表的问题,我试图找到最便宜的价值.排序不是问题,它返回的值是问题和我想要满足的条件.
基本上我的结果集中可能有0个值,这是因为这些项目已被暂时搁置,因此它们没有保留值但引用仍然为它们到达.
我们的想法是按总价值对结果进行排序,然后选择列表中的第一项,理论上它是最便宜的.
void Main()
{
GetCheapest();
}
public void GetCheapest()
{
List<Car> numbers = new List<Car>
{
new Car() { Type="dearest", Total = 990 },
new Car() { Type="", Total = 570 },
new Car() { Type="", Total = 907 },
new Car() { Type="cheapest", Total = 0 },
new Car() { Type="", Total = 333 },
new Car() { Type="", Total = 435 },
new Car() { Type="", Total = 435 }
};
//order ascending
IEnumerable<Car> query = numbers.OrderBy( q => q.Total );
//set the cheapest to be the first index in the sorted IEnumerable
var cheapest = query.First();
//output the cheapest
Console.Write( cheapest.Type + " - £" + cheapest.Total + ", Winning!!" );
//new line
Console.WriteLine( Environment.NewLine );
//output each one
foreach( Car q in query )
{
Console.WriteLine( q.Type + " - £" + q.Total );
}
}
//Quote Object
public class Car
{
public decimal Total { get; set; }
public string Type { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
总之, 我想迭代返回的列表,直到我到达一个保持值大于0的索引.
给出的例子的答案是333.
如果有人有任何更好的想法,我可以尝试这些.
到目前为止,我已经在SO上查看了这些问题,但这些问题没有得出答案:
除非我遗漏了某些东西,否则它只会是:
numbers.Where(c => c.Total > 0)
.OrderBy(c => c.Total)
.First();
Run Code Online (Sandbox Code Playgroud)
或链接到您现有的查询:
IEnumerable<Car> query = numbers.OrderBy( q => q.Total );
var cheapestCar =
query.Where(c => c.Total > 0)
.First();
Run Code Online (Sandbox Code Playgroud)