2012-04-02 7 views
0

良い一日、 I持って、私はSLQまたはラムダ式にLINQに次のクエリのSQLを変換する必要があり、問題 次は、linqまたはラムダ式のクエリ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 

はLISTはリストである(12,15,18,19 、...)

linqまたはlamnbda式で実行されますか?

個!ここで

+0

。 1つの内部結合を行い、それをあなたのために働かせ、単純なグループ化を行い、それをまとめてください。 –

+0

sqlをlinq/lambda文に変換する – ch2o

答えて

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

"Importe"フィールドがGroupBy節に存在しますか? – ch2o

+0

Importeはグループ化の各要素に存在します。だからあなたはそれを上に合計を使用することができます。 –

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と等しい はt2.IDがt2.IDの場合はdataContext.tabla_2のt2に参加します。 ここでlistIds.contains(t1.ID ) グループt2 by t2.ID g 新規選択{g.ID、g.Sum(t => t.Importe)、...}); LINQ to Entitiesが 'Boolean Contains(Int32)'メソッドを認識せず、このメソッドをストア式に変換できません。 – ch2o

+0

The_Smallestの答えと同じ機能です。彼の例で働いていますか? –

+0

作業なし、例外メッセージ: "LINQ to Entitiesはメソッド 'Boolean Contains(Int32)'を認識しません。このメソッドはストア式に変換できません" thks anyway =) – ch2o

関連する問題