Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/wix/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用sum和group by的LINQ和子选择查询?_Linq_Group By_Subquery_Sum - Fatal编程技术网

使用sum和group by的LINQ和子选择查询?

使用sum和group by的LINQ和子选择查询?,linq,group-by,subquery,sum,Linq,Group By,Subquery,Sum,谁能帮我一个LINQ查询。我已经转换了它的大部分,但是我在存储过程中有一个子查询,我不知道如何进行转换 基本上,这是旧的存储过程(为了方便起见被截断) 从上面可以看到,子查询是这样的 SELECT SUM(Amount) AS Expr1 FROM M WHERE ( ClientCode = C.ClientCode ) GROUP BY ClientCod

谁能帮我一个LINQ查询。我已经转换了它的大部分,但是我在存储过程中有一个子查询,我不知道如何进行转换

基本上,这是旧的存储过程(为了方便起见被截断)

从上面可以看到,子查询是这样的

              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 -->
            };
var test=从c中的c连接到c中的h。代码
等于c.ClientCode上的h.Code在m中连接m
等于m.ClientCode
选择新的
{ 
周期=m.Period,
组=c代码,
代码=c.ClientCode,
Name=c.ClientName,
};
但是我不知道如何做子查询。列的名称将是Amount,正如您在旧存储过程中看到的那样

如果您有任何反馈或帮助,我将不胜感激


谢谢

我不确定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)
}

我不确定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)
}

哇!谢谢雷蒙德!!是的,把它放进去。。而且有效:-)谢谢。。。。请您解释一下为什么我需要Expr1,然后在第一个()之后需要另一个Expr1好吗?当然,如果我删除EXPR1,它就会失败。。但是我不完全理解为什么它会在那里:-)Expr1是计算总和的变量,而第二个Expr1会暴露它哇!谢谢雷蒙德!!是的,把它放进去。。而且有效:-)谢谢。。。。请您解释一下为什么我需要Expr1,然后在第一个()之后需要另一个Expr1好吗?当然,如果我删除EXPR1,它就会失败。。但是我不完全理解为什么它在那里:-)Expr1是计算和的变量,而第二个Expr1公开了它