Есть классы моделей
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<Order>>
, а мне необходим IEnumerable<Customers>
.
Скажите пожалуйста в каком месте я ошибаюсь, и как делать запросы подобного вида правильно.
Вам нужно написать так:
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
, так как он возвращает новую коллекцию.
Два from
подряд, в query
форме соответствуют методу SelectMany
Запрос может принять вид:
var customers = dataSource.Customers
.SelectMany(c => c.Orders, (c,o) => new {c, o})
.Where(item => item.o.Total > value)
.Select(item => item.c)
.Distinct();
Кофе для программистов: как напиток влияет на продуктивность кодеров?
Рекламные вывески: как привлечь внимание и увеличить продажи
Стратегії та тренди в SMM - Технології, що формують майбутнє сьогодні
Выделенный сервер, что это, для чего нужен и какие характеристики важны?
Современные решения для бизнеса: как облачные и виртуальные технологии меняют рынок
Решил сделать программку на шарпе для андроидДобавил в VS installer все инструменты для андроид розработки
В datagridview можно заполнять по горизонтально, но как заполнить вертикалноУ меня есть столбцы называется "Кабинка 1", "Кабинка 2" и