LINQ с дополнительным запросом выбора с использованием суммы и группировки по? - PullRequest
0 голосов
/ 18 ноября 2010

Может кто-нибудь помочь мне с запросом LINQ. Я преобразовал большую часть этого, но у меня есть подзапрос в хранимой процедуре, и я не могу понять, как это сделать ..

в основном это старая хранимая процедура (для удобства усечена)

 SELECT  M.Period AS 'Period' ,
            C.Code AS 'Group' ,
            C.ClientCode AS 'Code' ,
            C.ClientName AS 'Name' ,
            ( SELECT    SUM(Amount) AS Expr1
              FROM      M
              WHERE     ( ClientCode = C.ClientCode )
              GROUP BY  ClientCode
            ) AS 'Amount' ,

Как видно из приведенного выше, подзапрос выглядит так:

              SELECT    SUM(Amount) AS Expr1
              FROM      M
              WHERE     ( ClientCode = C.ClientCode )
              GROUP BY  ClientCode
            ) AS 'Amount'

Итак, я выполнил все свои соединения, и пока у меня есть это, и оно работает.

 var test = from c in C join h in H on c.Code 
            equals h.Code join m in M on c.ClientCode   
            equals m.ClientCode 
            select new 
            { 
                Period=m.Period,
                Group=c.Code,
                Code= c.ClientCode,
                Name= c.ClientName,
                <-- Here is where i need the sub select query above -->
            };

Но я не знаю, как сделать подзапрос. Имя столбца будет Amount, как вы можете видеть в старой хранимой процедуре.

Буду признателен за любые отзывы или помощь

* 1016 БЛАГОДАРЯ *

1 Ответ

2 голосов
/ 18 ноября 2010

Я не уверен в последней части вашего SQL-запроса, но я предполагаю что-то вроде

SELECT  M.Period AS 'Period' ,
C.Code AS 'Group' ,
C.ClientCode AS 'Code' ,
C.ClientName AS 'Name' ,
( SELECT    SUM(Amount) AS Expr1
  FROM      M
  WHERE     ( ClientCode = C.ClientCode )
  GROUP BY  ClientCode
) AS 'Amount' 
from C inner join M on C.ClientCode = M.ClientCode

, поэтому ваш LINQ будет таким

var test = from c in db.C
select new {
  Period = c.M.Period,
  Group = c.Code,
  Code = c.ClientCode,
  Name = c.ClientName,
  Amount = (System.Int32)
    ((from m0 in db.M
    where
      m0.ClientCode == c.ClientCode
    group m0 by new {
      m0.ClientCode
    } into g
    select new {
      Expr1 = (System.Int32)g.Sum(p => p.Amount)
    }).First().Expr1)
}
...