我的模型包含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);
}
}
我如何正确计算
答案 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评论说:使用视图模型 - 该属性不应该是数据模型的一部分