Страницы

Поиск по вопросам

четверг, 16 мая 2019 г.

LINQ из выражения в точечную нотацию

Есть классы моделей
public class Product { public int ProductID { get; set; } public string ProductName { get; set; } public string Category { get; set; } public decimal UnitPrice { get; set; } public int UnitsInStock { get; set; } }
public class Order { public int OrderID { get; set; } public DateTime OrderDate { get; set; } public decimal Total { get; set; } }
Необходимо получить всех клиентов, у которых были заказы, превосходящие по сумме величину value
Я сделал следующий запрос
var customers = from c in dataSource.Customers from o in c.Orders where o.Total > value select c).Distinct();
Выводит то что нужно.
Необходимо выполнить данный запрос в точечной нотации, я пытаюсь сделать так:
var customers = dataSource.Customers.Select(c => c.Orders .Where(o => o.Total > value)) .Distinct();
и получается, что запрос возвращает IEnumerable>, а мне необходим IEnumerable. Скажите пожалуйста в каком месте я ошибаюсь, и как делать запросы подобного вида правильно.


Ответ

Вам нужно написать так:
var customers = dataSource.Customers.Where(c => c.Orders.Any(o => o.Total > value)).Distinct();
Если нужно чтобы хотя бы один заказ больше value, или так:
var customers = dataSource.Customers.Where(c => c.Orders.All(o => o.Total > value)).Distinct();
Если нужно чтобы все заказы больше value
В данном случае не стоит использовать метод Select, так как он возвращает новую коллекцию.

Комментариев нет:

Отправить комментарий