2012-04-02 72 views
0

好日子所有, 我有以下問題 我有以下SQL查詢轉換爲LINQ到SLQ或lambda表達式:在linq或lambda表達式中執行查詢SQL?

SELECT T2.ID, SUM(T1.Importe) AS Importe, T3.ID, T3.Column_1, 
     T3.Column_2, T1.Column_3 
FROM Tabla_1 T1 
INNER JOIN Tabla_2 T2 on T1.ID = T2.ID 
INNER JOIN Tabla_3 T3 on T2.ID = T3.ID 
WHERE T1.ID in (LIST) 
GROUP BY T2.ID, T3.ID, T3.Column_1, Column_2, T1.Column_3 

,其中目錄是(12,15,18,19 ,...)

在linq或lamnbda表達式中執行?

thks!

+0

開始關小。做一個內部連接併爲你工作,做一個簡單的分組,然後把它放在一起。 – 2012-04-02 22:58:24

+0

將sql轉換爲linq/lambda語句 – ch2o 2012-04-02 22:58:40

回答

3

這裏是提示:

var result = ents.T1 
    .Where(x => list.Contains(x.Id)) 
    .GroupBy(x => new 
       { 
        Id2 = x.T2.Id, 
        Id3 = x.T3.Id, 
        ... 
        // etc group fields 
       }) 
    .Select(x => new 
       { 
        Importe = x.Sum(i => i.Importe) 
        x.Key.Id2, 
        // other group fields 
        ... 
       }) 
    .ToArray(); 

我強烈建議不要來命名列和表你的方式。真的)

+0

GroupBy子句中存在「Importe」字段? – ch2o 2012-04-02 23:55:35

+0

Importe存在於分組的每個元素中。所以你可以用Sum來覆蓋它。 – 2012-04-03 11:20:28

1

我沒有嘗試,但它可能看起來像:

var result = (from t1 in dataContext.tabla_1 
       join t2 in dataContext.tabla_2 on t1.ID equals t2.ID 
       join t2 in dataContext.tabla_2 on t2.ID equals t3.ID 
       group t2 by t2.ID into g 
       where listIds.contains(t1.ID) 
       select new {g.ID, g.Sum(t => t.Importe), ...}); 
+0

var result =(從dataContext.tabla_1中的t1開始 在t1.ID上加入dataContext.tabla_2中的t2等於t2.ID 在t2.ID上的dataContext.tabla_2中加入t2等於t3.ID where listIds.contains(t1.ID ) group t2 by t2.ID into g select new {g.ID,g.Sum(t => t.Importe),...}); LINQ to Entities不識別方法'布爾包含(Int32)'方法,並且此方法不能轉換爲存儲表達式。 – ch2o 2012-04-03 14:25:10

+0

它和The_Smallest的答案是一樣的功能。它在他的例子中工作嗎? – 2012-04-03 19:27:49

+0

沒有工作,異常消息:「LINQ to Entities無法識別該方法'布爾包含(Int32)'方法,並且此方法無法轉換爲存儲表達式」thks anyway =「 – ch2o 2012-04-09 16:01:01