Я пытаюсь создать дерево выражений динамически.
Давайте предположим, что у меня есть два простых класса:
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 = ???
};
Спасибо за помощь!