帮助将 SQL 语句转换为 LINQ Lambda(在 group by 和 sum 方面需要帮助)

Posted

技术标签:

【中文标题】帮助将 SQL 语句转换为 LINQ Lambda(在 group by 和 sum 方面需要帮助)【英文标题】:Help convert SQL statement to LINQ Lambda (need help with group by and sum) 【发布时间】:2011-09-08 14:17:11 【问题描述】:

这是转换为 LINQ to SQL 的语句(请使用 Lambda)

SELECT [日期],SUM(计数)[计数], SUM(时间) [时间] FROM dbo.TableName 按[日期]分组

这是没有分组和求和的原始数据

Date                    Counted Time
2011-09-07 00:00:00.000 34      31
2011-09-07 00:00:00.000 6       3
2011-09-07 00:00:00.000 7       3
2011-09-07 00:00:00.000 6       2
2011-09-07 00:00:00.000 7       2
2011-09-07 00:00:00.000 19      4
2011-09-07 00:00:00.000 13      4
2011-09-07 00:00:00.000 11      4
2011-09-07 00:00:00.000 14      3
2011-09-07 00:00:00.000 0.75    3

这些是group by和sum应用后的结果

Date                    Counted Time
2011-09-07 00:00:00.000 117.75  59

这是我到目前为止所拥有的,但是在进行分组和求和时我很困惑。很明显我的语法有点离谱。

var q = context.TableName.Where(...)
               .GroupBy(x => new  x.Date)
               .Sum(x => x.Counted, x.Time????)
               .Select(x => x.Date, x.Counted, x.Time;

【问题讨论】:

DataTable 中有数据吗?据我所知,你有,对吧? 【参考方案1】:
var q = context.TableName
           .GroupBy(x => x.Date)
           .Select(g => new  
               Date = g.Key,
               Counted = g.Sum(x => x.Counted), 
               Time = g.Sum(x => x.Time)
           );

【讨论】:

【参考方案2】:

使用 Sum() 扩展方法怎么样:

var query = table.AsEnumerable().Select(s => s.Field<int>("counted")).Sum();

【讨论】:

以上是关于帮助将 SQL 语句转换为 LINQ Lambda(在 group by 和 sum 方面需要帮助)的主要内容,如果未能解决你的问题,请参考以下文章

帮助我使用实体框架从 SQL 转换为 linq 嵌套 lambda 表达式

如何将带有内连接的 sql 查询转换为 linq lambda 表达式?

SQL 语句到 linq lambda

如何将以下 SQL 语句转换为 LINQ 方法语法

将 SQL 语句转换为 LINQ VS2010

将SQL语句转换为LINQ VS2010