实体框架核心上的sql查询,包括sum(x-y),count(<condition>)和group

时间:2017-12-19 13:36:13

标签: sql postgresql linq .net-core entity-framework-core

我得到了一个taf SQL查询,应该使用最新的postgres提供程序在最新版本的entity-framework core(dotnet core 2)中运行:

SELECT
    date_trunc('day', "StartTime") AS DAY
,   sum("AnswerTime" - "StartTime")
,   count("AnswerTime" != "ReleaseTime")
FROM "Cdrs"
GROUP BY DAY
ORDER BY DAY;

我可以部分解决它,但我无法完成整个查询。 主要是计算值的总和我不知道如何解决。

也算一个条件,不知道如何在EF核心

我试着用linq来解决它这样的问题(不确定无论如何这都会起作用):

[SuppressMessageAttribute("Microsoft.Usage", "CA1801:ReviewUnusedParameters", MessageId = "dateValue")]
[DbFunctionAttribute("date_trunc")]
public extern static DateTimeOffset? date_trunc(string what, DateTimeOffset? dateValue);

var x = (from c in ef.Cdrs
         group c by date_trunc("day", c.StartTime) into day
         //group c by (c.AnswerTime - c.StartTime) into g
         select new { day.Count( })

如何将上述SQL引入实体框架核心(dotnet 2)的任何提示都表示赞赏。

1 个答案:

答案 0 :(得分:0)

尝试类似的东西;

        var query = ef.Cdrs
            .GroupBy(x => new { Day = date_trunc("d", x.StartTime) })
            .Select(x => new
            {
                Day = x.Key.Day,
                Sum = x.Sum(s => s.AnswerTime - s.StartTime),
                Count = x.Count(c => c.AnswerTime != c.ReleaseTime)
            });