Я пытаюсь создать дерево выражений динамически.Linq inner join grouping
Пусть предполагаю, что у меня есть два простых классов:
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: Left Outer Join и Left Inner Join.
Таким образом, используя левое внешнее соединение можно написать следующий запрос (для упрощения я буду иллюстрировать вопрос, используя выражение 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 будет содержать все соответствующие Заказы.
Я просто не понимаю, как я могу использовать левое внутреннее соединение, чтобы получить тот же результат с фильтрацией на основе полей таблицы заказов (например, мне нужно запросить всех клиентов, у которых есть заказ с более высокой ценой чем 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 = ???
};
Спасибо за помощь!
То, что вы называете «левое внешнее объединение» на самом деле называется «объединение группы» в Linq. Linq не является SQL, а понятия SQL не переводятся непосредственно в Linq. –
Благодарим вас за исправление. – junglit