gpt4 book ai didi

c# - LINQ to Entities不支持指定的类型成员'Offset'

转载 作者:太空宇宙 更新时间:2023-11-03 18:09:05 25 4
gpt4 key购买 nike

下一个代码运行时出现异常:

 var fbPost = db.FacebookStatusUpdates
.Where(f =>
f.FacebookUpdateTime - f.ClientTime.Offset <=
DateTimeOffset.Now.UtcDateTime - ConvertTimeSpan(f.Offset) &&
f.Status == FacebookNotificationStatus.Active &&
f.Alarm.User.FbStatus == true).ToList();


异常消息


  LINQ to Entities不支持指定的类型成员'Offset'。只要
  初始化程序,实体成员和实体导航属性是
  支持的。


我的模特:

 public class FacebookStatusUpdate
{
public long Id { get; set; }
public DateTime FacebookUpdateTime { get; set; }
public string PostId { get; set; }
public DateTime? FacebookPostTime { get; set; }
public DateTimeOffset ClientTime { get; set; }
public int Offset { get; set; }

public virtual FacebookNotificationStatus Status { get; set; }
public virtual Alarm Alarm { get; set; }
}


有人可以帮我吗?

最佳答案

当您使用LINQ to Entities时,您需要记住您的查询将转换为TSQL-如果Offset是自定义类型,则EF不知道如何将其转换为SQL。

如果您可以将查询转换为LINQ to Objects,则当然可以使此工作有效。

 var fbPost = db.FacebookStatusUpdates
.Where(f => f.Status == FacebookNotificationStatus.Active &&
f.Alarm.User.FbStatus == true)
.AsEnumerable() // convert from L2E to L2O
.Where(f => f.FacebookUpdateTime - f.ClientTime.Offset <=
DateTimeOffset.Now.UtcDateTime - ConvertTimeSpan(f.Offset))
.ToList();


调用 AsEnumerable()之后,其余查询就是LINQ to Objects,它可以理解 Offset / ConvertToTimespan代码。只是为了澄清, AsEnumerable()不会正确实现查询-您仍然会延迟加载。但是,在客户端完成 AsEnumerable()之后的任何进一步查询,都不会与数据库进行任何交互。

使用L2E时,最好坚持使用受支持的 primitive types

关于c# - LINQ to Entities不支持指定的类型成员'Offset',我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19997792/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com