小编Dev*_*evT的帖子

LINQ查询中多列的总和

我有这个表:统计(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个执行计划:

在此输入图像描述

c# linq linq-to-sql

5
推荐指数
2
解决办法
7608
查看次数

如何将unix时间戳转换为datetime

我试图 在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

我怎么能改变这个呢?

c# datetime unix-timestamp

4
推荐指数
3
解决办法
2万
查看次数

LINQ to Entities无法识别方法ToDateTime(System.String)

我必须使用"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中翻译,我需要一个想法来做那个查询.

更新:我不会在转换之前实现查询,因为这显然意味着获取所有记录.

c# linq datetime entity-framework

4
推荐指数
1
解决办法
796
查看次数