模型中两个日期时间属性之间的差异(c#)

时间:2017-10-17 09:46:26

标签: c# entity-framework linq

我的模型包含2个DateTime属性

这是代码

    sing System.ComponentModel.DataAnnotations.Schema;

namespace GoogleMapsAsp_Net.Models
{
    using System;
    using System.Collections.Generic;

    public partial class Park
    {
        public int parkId { get; set; }
        public decimal Longitude { get; set; }
        public decimal Latitude { get; set; }
        public Nullable<System.DateTime> TimeStart { get; set; }
        public Nullable<System.DateTime> TimeEnd { get; set; }
        [NotMapped]
        public TimeSpan? Difference { get { return TimeStart - TimeEnd; } }
    }
}

我想用几分钟来计算它们之间的差异,并在新属性中写下差异。所以我写了这个属性

public TimeSpan? Difference { get { return TimeStart - TimeEnd; } }

但是当我运行项目时我有这个错误

  

'LINQ to Entities不支持指定的类型成员'Difference'。仅支持初始值设定项,实体成员和实体导航属性。'

这是我在后端的方法,我试图从模型属性

中获取差异
public JsonResult GetPlaces()
    {
        using (var ctx = new GoogleMapsAsp_NetContext())
        {
             const int coeff = 2; 
            var items = ctx.Parks.Select(
                x => new
                {
                    lng = x.Longitude,
                    lat = x.Latitude,
                    difference = x.Difference
                }
            ).ToList();
            return Json(items.ToArray(), JsonRequestBehavior.AllowGet);
        }
    }

我如何正确计算

1 个答案:

答案 0 :(得分:4)

问题是您在数据库中执行的查询中使用Distance属性,这是不可能的。在使用属性之前添加AsEnumerable以获取数据:

var items = ctx.Parks.AsEnumerable().Select(
            x => new {
                lng = x.Longitude,
                lat = x.Latitude,
                difference = x.Difference
            }).ToArray();

无需先将其创建为List,然后再调用ToArray。只需使用ToArray一次

以前无关的回答: 使用[NotMapped]属性,以便EF忽略该属性:

[NotMapped]
public TimeSpan? Difference { get { return TimeStart - TimeEnd; } }

或者更好的是@Stephen评论说:使用视图模型 - 该属性不应该是数据模型的一部分