我试图动态地创建表达式树。Linq内连接分组
让asume我有两个简单的类:
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
};
所以,一个订单属性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。 – 2009-09-01 09:52:10
谢谢你的纠正。 – junglit 2009-09-01 10:51:28