使用linq查找列表中大于0的最便宜的项目

Mas*_*oda 0 c# linq

我面临排序列表的问题,我试图找到最便宜的价值.排序不是问题,它返回的值是问题和我想要满足的条件.

基本上我的结果集中可能有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上查看了这些问题,但这些问题没有得出答案:

使用LINQ查找价格最便宜的产品?

使用扩展方法min()获取具有最小值的对象

D S*_*ley 7

除非我遗漏了某些东西,否则它只会是:

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)