2010-11-27 121 views
0

我想這個查詢轉換爲LINQ與實體框架4.SQL查詢LINQ

Select *, 
(select SUM(Of_Orders.Contribution) from Of_Orders 
where Of_Orders.CauseID = Of_Causes.CauseID) AS Earned 
FROM Of_Causes 

使用誰能幫我做這件事。

由於提前

回答

1

它冷卻像CauseID字段表示外鍵?如果確實如此,則可以在實體模型中映射關聯,以便cause.Orders是您可以訪問的屬性。注意,你也可以重命名實體/屬性,它們不必與表名匹配,這樣你就可以擺脫醜陋的下劃線!這會再看看這樣的:

var result = from c in context.Of_Causes 
select new {cause, cause.Orders.Sum(o => o.Contribution} 

你會從這樣做,(如果可以的話),就像一個吸塵器模型得到一些好處,併產生更有效的SQL查詢。

如果你不能使用外鍵,我會手動加入表格,這應該再次提高性能。

我相信是這樣的,但我的翻譯從VB到C#可能是不可靠的,這裏的C#:

var context = new ModelContainer(); 
var result = from c in context.Of_Cause 
      join o in context.Of_Orders on c.Id equals o.CauseID into g 
      select new {Cause = c, Total = g.Sum(o => o.Contribution)}; 

而這裏的VB原的情況下,我的翻譯是關閉!

Dim result = From cause As Of_Cause In context.Of_Cause 
      Group Join order As Of_Orders In context.Of_Orders On order.CauseID Equals cause.Id Into total = Sum(order.Contribution) 
      Select New With {.Cause = cause, .Total = total} 
+0

嗨,這是一個很酷的解釋。你可以幫助我做更多的事情,只要我們做「選擇新的」它會創建一個匿名類型。我想創建一個類型Cause的列表,並且希望將Total存儲在Cause對象的屬性中,我應該怎麼做? – 2010-11-28 15:52:13

1

這將是類似於:

from cause in context.Of_Causes 
select new { 
    cause, 
    Earned = context.Of_Orders.Where(o => o.CauseID == cause.CauseID).Sum(o => o.Contribution) 
}; 

我做了有關所涉及的類型的一些假設,但應該是很容易爲你工作了。

+0

這是......我已經做了,但「選擇新的」正在創建一個匿名類型,但我想創建一個原因類型列表。 – 2010-11-28 15:53:59