Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/69.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
C# SQL to Linq选择分组方式中的多个列_C#_Sql_Linq - Fatal编程技术网

C# SQL to Linq选择分组方式中的多个列

C# SQL to Linq选择分组方式中的多个列,c#,sql,linq,C#,Sql,Linq,我想将SQL语句转换为LINQ,但在转换时遇到一些问题 sql语句是: SELECT C.[Call_Date], CC.[Company], R.Resolution, COUNT_BIG(*) AS CNT, SUM([Duration]) AS Total FROM [Calls] C Join [CompanyCharges] CC on [Company_Charge] = [CompanyCharge] Join [Reso

我想将SQL语句转换为LINQ,但在转换时遇到一些问题

sql语句是:

SELECT 
    C.[Call_Date], CC.[Company], R.Resolution, 
    COUNT_BIG(*) AS CNT,
    SUM([Duration]) AS Total
FROM 
    [Calls] C
Join 
    [CompanyCharges] CC on [Company_Charge] = [CompanyCharge] 
Join 
    [Resolutions] R on C.Call_Resolution = R.Resolution
where 
    Call_Date >= '05/29/2013' 
Group By 
    C.[Call_Date], CC.[Company], CC.[CompanyCharge], R.Resolution, R.Resolution_Order
我写了这样的东西:

var stats = from c in dbContext.Calls
    join cc in dbContext.CompanyCharges on c.Company_Charge equals cc.CompanyCharge
    join r in dbContext.Resolutions on c.Call_Resolution equals r.Resolution
    where (c.Call_Date > "05/29/2013")
    group new { c, cc, r } by new { c.Call_Date, cc.CompanyCharge, r.Resolution, r.Resolution_Order } into statsGroup
    select new { Count = statsGroup.Count(), ??? };
我设法计算了元素,但我需要一个sum[duration]和来自不同表的一些列。
请与我分享您的智慧。

假设
[Duration]
字段是
[Calls]
表的一部分:

var stats = /* ... */
    select new 
    { 
        Count = statsGroup.Count(), 
        Total = statsGroup.Sum(stat => stat.c.Duration),
    };
您可能还希望在新的匿名类型中包含分组字段:

var stats = /* ... */
    select new 
    { 
        Call_Date = statsGroup.Key.c.Call_Date,
        CompanyCharge = statsGroup.Key.cc.CompanyCharge, 
        Resolution = statsGroup.Key.r.Resolution, 
        Count = statsGroup.Count(), 
        Total = statsGroup.Sum(stat => stat.c.Duration),
    };

假设
[Duration]
字段是
[Calls]
表的一部分:

var stats = /* ... */
    select new 
    { 
        Count = statsGroup.Count(), 
        Total = statsGroup.Sum(stat => stat.c.Duration),
    };
您可能还希望在新的匿名类型中包含分组字段:

var stats = /* ... */
    select new 
    { 
        Call_Date = statsGroup.Key.c.Call_Date,
        CompanyCharge = statsGroup.Key.cc.CompanyCharge, 
        Resolution = statsGroup.Key.r.Resolution, 
        Count = statsGroup.Count(), 
        Total = statsGroup.Sum(stat => stat.c.Duration),
    };

要将SQL查询转换为LINQ查询,可以使用Linqer之类的工具:我想通过解决问题来学习LINQ。当我做不到的时候,我就写在这里,试着从我收到的答案中学习。我不想使用工具。无论如何,谢谢你
Linqer正在出售
该工具确实包含您所寻求的知识。您是否认为,如果该工具向您展示了如何将SQL查询转换为LINQ,那么您将从中学习到与从这里的答案中学习到的一样多的东西,这是公平的假设?我最终安装了Linqer。谢谢你的想法。要将SQL查询转换为LINQ查询,你可以使用Linqer之类的工具:我想通过解决问题来学习LINQ。当我做不到的时候,我就写在这里,试着从我收到的答案中学习。我不想使用工具。无论如何,谢谢你
Linqer正在出售
该工具确实包含您所寻求的知识。您是否认为,如果该工具向您展示了如何将SQL查询转换为LINQ,那么您将从中学习到与从这里的答案中学习到的一样多的东西,这是公平的假设?我最终安装了Linqer。谢谢你的想法。似乎你错过了statsGroup之后的Key属性(statsGroup.Key.c.Call_Date,statsGroup.Key.cc.CompanyCharge,statsGroup.Key.r.Resolution)
选择新的{g.Key.Call_Date,g.Key.Company,g.Key.Resolution,CNT=g.Count(),Total=(int?)g.Sum(p=>p.c.Duration)}
这是我期待的答案@道格拉斯:请把你的答案编辑成正确的,我会接受的。@rhose87:为什么
int?
?我不相信在SQL代码中,
Total
是可以为空的?Linqer这样转换它。我刚刚使用了
int
。似乎您在statsGroup(statsGroup.Key.c.Call_Date,statsGroup.Key.cc.CompanyCharge,statsGroup.Key.r.Resolution)之后错过了Key属性(statsGroup.Key.Call_Date,g.Key.Company,g.Key.Resolution,CNT=g.Count(),Total=(int?)g.Sum(p=>p.c.Duration)}这是我期待的答案@道格拉斯:请把你的答案编辑成正确的,我会接受的。@rhose87:为什么
int?
?我不相信在SQL代码中,
Total
是可以为空的?Linqer这样转换它。我只使用了
int