我有这个表:统计(id int,col1 int,col2 int,col3 int ...)我想得到col1值,col2值,col3值等的总和. 一个简单的sql查询:
SELECT SUM([Col1]), SUM([Col2])
FROM [dbo].[Statistics]
Run Code Online (Sandbox Code Playgroud)
但在LINQ中:
var val1 = db.Statistics.Sum(x => x.Col1);
var val2 = db.Statistics.Sum(x => x.Col2);
var val3 = db.Statistics.Sum(x => x.Col3);
...
Run Code Online (Sandbox Code Playgroud)
以这种方式工作,但这会在数据库上执行N个查询.我想只执行一个.我找到的唯一方法是:
var result = db.Statistics.GroupBy(x => 1).Select(x => new
{
val1 = x.Sum(k => k.Col1),
val2 = x.Sum(k => k.Col2),
val3 = x.Sum(k => k.Col3),
});
Run Code Online (Sandbox Code Playgroud)
它生成一个复杂的查询.这是正常的吗?
更新 这些是2个执行计划:

我试图 在DateTime中转换此unix时间戳 1415115303410,这样:
private static DateTime UnixTimeStampToDateTime(long unixTimeStamp)
{
System.DateTime dtDateTime = new DateTime(1970, 1, 1, 0, 0, 0, 0, System.DateTimeKind.Utc);
dtDateTime = dtDateTime.AddMilliseconds(unixTimeStamp);
return dtDateTime;
}
Run Code Online (Sandbox Code Playgroud)
但是我的日期错了: 日期:{04/11/0045 00:00:00}
注意:dtDateTime.AddSeconds(unixTimeStamp)抛出异常..我的数字以毫秒为单位.
使用此在线转换工具http://www.epochconverter.com/我得到了正确的转换:
04/11/2014 15:35:03 GMT + 0:00
我怎么能改变这个呢?
我必须使用"convert to datetime"方法来比较日期时间与参考月份和年份,如下所示
var res = db.Table1
//other tables, and where conditions
.Select(x => new MyObj
{
//...
Imp = x.MyTable.FirstOrDefault(y => y.date_val >= System.Data.Entity.DbFunctions.AddMonths(Convert.ToDateTime("01/" + x.month + "/" + x.year), 1))).Description
})
Run Code Online (Sandbox Code Playgroud)
我知道Convert.ToDateTime无法从提供者的sql中翻译,我需要一个想法来做那个查询.
更新:我不会在转换之前实现查询,因为这显然意味着获取所有记录.