2013-01-02 41 views
3

我有以下SQL,我要轉換爲LINQ通過沒有按轉換SQL到LINQ與加盟,組由何

SELECT Contrato.finca, SUM(Pago.Importe_subtotal) 
FROM Pago, Contrato 
WHERE Pago.Contrato = Contrato.ID AND Pago.pagado = 1 
GROUP BY Contrato.finca 
ORDER BY 2 DESC 
GO 

我現在已經在LINQ什麼是下面的,但集團沒有工作。

var x = from contrato in ctx.Contratos 
     join pago in ctx.Pagos 
     on contrato.ID equals pago.Contrato 
     where pago.pagado == true 
     group contrato by contrato.finca 
     select contrato.Finca1; 
+0

是否有必要使用LINQ時加入?如果您的實體模型設置正確,相關實體應該是一個屬性。你的數據庫模式是什麼樣的? – Slick86

+0

不起作用... _什麼是不工作? –

+0

這是一個屬性。它在Finca1 – xexe1982

回答

3

認爲這應該工作:

ctx.Pagos.Where(m=>m.pagado==true).GroupBy(m=>m.Contrato.finca) 
    .Select(m=> new { Id= m.Key, Val= m.Sum(n => n.Importe_subtotal)}) 
+0

我已經添加了一個「)」來關閉總和。這個語法對我來說是全新的。你有任何鏈接,關於如何使用它?我得到以下錯誤:方法'System.Linq.Enumerable.Join 的類型參數(System.Collections.Generic.IEnumerable ,System.Collections.Generic.IEnumerable ,System.Func ,System.Func ,System.Func )'不能根據用法推斷。嘗試明確指定類型參數。 – xexe1982

+0

這是方法語法。我認爲它更容易閱讀:http://msdn.microsoft.com/en-us/library/bb669071.aspx – Slick86

+0

再次嘗試,我有pago連接屬性不正確 – Slick86

2

嘗試

var x = from contrato in ctx.Contratos 
     join pago in ctx.Pagos 
     on contrato.ID equals pago.Contrato 
     where pago.pagado == true 
     group new {contrato, pago} by contrato.finca into g 
     select new { 
      key = g.Key, 
      sum = g.Sum(p => p.pago.Importe_subtotal) 
     }; 
+0

我得到以下錯誤:錯誤'System.Linq.IGrouping '不包含'Finca1'的定義和沒有擴展方法'Finca1' - g顯示沒有任何屬性intellisence – xexe1982

+0

我更新了我的代碼,請再試一次。 –

+0

您的代碼中有Finc a1這就是爲什麼我把Finca1,但我也看到你有Finca。我不知道你的模型類型,我只是根據我在代碼中看到的。但在你最初的代碼中,你正在使用聲明。此外,我添加了SUM聚合,因爲您在初始查詢中擁有它。 –