C# 试图在Lambda LinQ中重写SQL

C# 试图在Lambda LinQ中重写SQL,c#,sql-server,linq,lambda,C#,Sql Server,Linq,Lambda,我正在将一些SQL脚本迁移到Lambda中,但我还不知道如何转换此SQL SELECT COUNT([ProcessID]) AS [Count], [ProcessType], AVG(DATEDIFF(s, [StartDate], [EndDate])) AS [AverageDuration] FROM [ProcessTable] WHERE [InstanceID] = @InstanceID AND [ProcessType] = @

我正在将一些SQL脚本迁移到Lambda中,但我还不知道如何转换此SQL

SELECT
    COUNT([ProcessID]) AS [Count],
    [ProcessType],
    AVG(DATEDIFF(s, [StartDate], [EndDate])) AS [AverageDuration]
FROM
    [ProcessTable]
WHERE
    [InstanceID] = @InstanceID
    AND [ProcessType] = @ProcessType
    AND [ProcessStatus] = 3 -- Finished
GROUP BY
    [ProcessType]
编辑:我尝试了以下方法,但它并不完全理解平均值是如何工作的

var result = (from p in ctx.ProcessTable
              where p.ProcessInstanceID.Equals(processInstanceID)
                 && p.ProcessType.Equals(processType)
                 && p.ProcesoStatusEquals(ProcessStatusEnum.FINISHED)
              group p by p.ProcessType into tp
              select new 
              {
                  Count = tp.Count(tp.ProcessID),
                  AverageDuration = tp.Average(p => p.EndDate - p.StarDate)
                  ProcesType = tp.ProcesType
              });

任何帮助都将不胜感激。。事先谢谢

经过几次尝试,我明白了。如果有人感兴趣,我会回答自己

class ProcessResult
{
    public int Count { get; set; }
    public double AverageDuration { get; set; }
    public string ProcessType { get; set; }
}

var result = (from p in ctx.ProcessTable
              where p.ProcessInstanceID.Equals(processInstanceID)
                 && p.ProcessType.Equals(processType)
                 && p.ProcesoStatusEquals(ProcessStatusEnum.FINISHED)
              group p by p.ProcessType into tp
              select new ProcessResult
              {
                  Count = tp.Count(),
                  AverageDuration = tp.Average(p => DbFunctions.DiffSeconds(p.StartDate, p.EndDate)),
                  ProcessType = tp.Key
              }).SingleOrDefault();

用我的最新尝试编辑…为什么不将原始查询实现到存储库中,而不是使用实体框架?这是一项要求。出于某种原因,他们不希望在项目中使用任何Sql,只希望使用EF。原始查询位于存储过程中,该存储过程在项目的早期版本中运行良好。请尝试:p.EndDate.Date-p.StarDate.Date。SQL脚本使用了整天,而转换使用了一天的部分时间。谢谢@jdweng,但我最终在差异中使用了TotalSeconds。请参阅下面的回复。