0

我正在使用Web API + AbpOData + EF并需要计算从服务器上的数据库返回的对象的某些属性。带定制计算属性的ABPOData + EF模型

基本的代码看起来是这样的:

[AbpApiAuthorize(AppPermissions.OData_Permission_Consume)] 
public class ActivityLogsController : AbpODataEntityController<ActivityLogs> 
{ 

    [EnableQuery(PageSize = 50000)] 
    public override IQueryable<ActivityLogs> Get() 
    { 
     var objectContext = new MyObjectContext(); //EF 

     return objectContext.ActivityLogs.GetAll(); 
    } 
} 

我只是从数据库中返回值,所有的罚款。

但我需要的是将两个日期时间值转换为本地时间。像下面

[AbpApiAuthorize(AppPermissions.OData_Permission_Consume)] 
public class ActivityLogsController : AbpODataEntityController<ActivityLogs> 
{ 

    [EnableQuery(PageSize = 50000)] 
    public override IQueryable<ActivityLogs> Get() 
    { 
     var objectContext = new MyObjectContext(); //EF 

     return objectContext.ActivityLogs.Select(d => new ActivityLogs() 
     { 
      Id = d.ID, 
      Activity = d.Activity, 
      StartTime = d.StartTime.Value.AddHours(5), 
      EndTime = d.EndTime.Value.AddHours(5), 
      Duration = d.Duration 
     }); 
    } 
} 

我收到以下错误

实体或复杂类型“ActivityLogs”不能在LINQ到实体查询构造。

如何我可以impliment这使用abp odata框架(.net零)。请记住,我们需要返回从EF调用返回的相同的IQueryable。

回答

0

该错误是由于无法将AddHours方法转换为SQL所致。

你有2种选择:

  • 创建数据库视图,您将让您的附加逻辑。
  • 在您的客户端添加DateTime属性的业务。
+0

感谢您的回复。基本上,我想将开始时间和结束时间转换为客户端本地时间(每个客户端时区存储在设置表中)。基于客户的时间将会改变。所以我不能使用第一个选项。这个API在Power BI中使用,所以第二个选项也不可行。 –