Как асинхронно найти и вернуть элемент объекта класса содержащий свойство с максимальным значением? .NET

Есть класс модели Order:

public class Order
{
    public int Id { get; set; }

    public string ProductName { get; set; }

    public int Price { get; set; }

    public int Quantity { get; set; } 

    public int UserId { get; set; }

    public virtual User User { get; set; }
}

Есть такой метод:

public  Task<Order> GetOrder()
{
    var orders=_dataManager.Orders.GetOrders();
    //return orders.Aggregate((x,y)=>x.Price>y.Price?x:y);
}

Необходимо найти заказ с самой большой суммой и вернуть это дело асинхронно. Как быть?


Ответы (1 шт):

Автор решения: aepot

Если есть только синхронный источник данных и решать в лоб, то как-то так

public Task<Order> GetMaxPriceOrder()
{
    return Task.Run(() =>
    {
        var orders = _dataManager.Orders.GetOrders();
        return orders.OrderByDescending(order => order.Price).First(); // или FirstOrDefault
    });
}

Для .NET 6+

public Task<Order> GetMaxPriceOrder()
{
    return Task.Run(() =>
    {
        var orders = _dataManager.Orders.GetOrders();
        return orders.MaxBy(order => order.Price);
    });
}
→ Ссылка