我正在尝试动态创建表达式树。
假设我有两个简单的类:
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 我可以编写以下查询(为简化起见,我将使用 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
};
因此,AccountType 对象的 Orders 属性将包含所有对应的 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 = ???
};
谢谢您的帮助!