我試圖動態地創建表達式樹。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