Я пытаюсь создать дерево выражений динамически.
Предположим, что у меня есть два простых класса:
class CustomerType
{
public int Id { get; set; }
public string Name { get; set; }
public OrderType[] Orders { get; set; }
}
class OrderType
{
public int Id { get; set; }
public DateTime Date { get; set; }
public decimal Price { get; set; }
}
.. и соответствующие типы сущностей без каких-либо ассоциаций (поэтому мне нужно использовать пользовательское соединение).
Мне нужно заполнить список клиентов соответствующими заказами. Я знаю, что в Linq есть два типа соединений: левое внешнее соединение и левое внутреннее соединение.
Итак, используя левое внешнее соединение, я могу написать следующий запрос (для упрощения я проиллюстрирую вопрос, используя выражение Linq вместо пользовательского кода генератора ExpressionTree):
var query = from c in db.Customers
join o in db.Orders on c.Id equals o.CustomerId into g
select new AccountType()
{
Id = c.Id,
Name = c.Name,
Orders = g
};
Таким образом, свойство Orders объекта AccountType будет содержать все соответствующие Orders.
Я просто не понимаю, как я могу использовать левое внутреннее соединение, чтобы получить тот же результат с фильтрацией на основе полей таблицы заказов (например, мне нужно запросить всех клиентов, у которых есть заказ с ценой выше 100,00):
var query = from c in db.Customers
join o in db.Orders on c.Id equals o.CustomerId
where o.Price > 100.00
select new AccountType()
{
Id = c.Id,
Name = c.Name,
Orders = ???
};
Спасибо за помощь!