Linq中的两个日期减去返回时间跨度的实体

时间:2012-09-03 12:17:00

标签: c# entity-framework linq-to-entities

我想减去两个日期并在Timespan for Example中获取值

TimeSpan duration = Convert.ToDateTime(completeDate).Subtract(Convert.ToDateTime(lastRundate));

这适用于正常实施。 HOw可以在Linq to Entities in Entity Framework中做到这一点

from job in Jobs
   select new JobEntity
  {                                                  
  Duration =  job.CompleteDate.Value.Subtract(job.NextRunDate.Value)
  };

乔布斯是我的桌子,CompleteDate& NextRunDate是我的DataType DateTime的列名? (因为它允许空值) 当我尝试这段代码时,它给了我这个错误

LINQ to Entities无法识别方法'System.TimeSpan Subtract(System.DateTime)'方法,并且此方法无法转换为商店表达式。 请告诉我如何解决这个问题。 提前谢谢

3 个答案:

答案 0 :(得分:2)

为什么不扩展您的JobEntity型号?

public DateTime NextRunDate { get; set; }
public DateTime CompletedDate { get; set; }
public Timespan Duration
{
    get
    {
        return CompleteDate.Subtract(NextRunDate)
    }
}

答案 1 :(得分:1)

您可以尝试使用EntityFunctions

from job in Jobs
select new JobEntity
{                                                  
    Duration = EntityFunctions.DiffSeconds(job.CompleteDate, job.NextRunDate)
};

您的代码文件中需要using System.Data.Objects;。它会以int为单位返回以秒为单位的时间跨度。

答案 2 :(得分:0)

您可以在结果对象上调用AsEnumerable(),然后在IEnumerable-Object上进行减法。

var jobs = Jobs.AsEnumerable().Select(j => new JobEntity
{ 
    Duration = j.CompleteDate.Value.Subtract(j.NextRunDate.Value) 
});