LINQ2SQL 实体框架中不存在受支持的 SQL 转换



我们已经在 mvc 项目中使用 LINQ2SQL 一段时间了,它有点长了。

我们经常面临的问题之一是,当我们尝试使用类似的东西进行查询时,"不存在受支持的SQL转换"。

LINQ2SQL分部类

public class User
{
   public bool IsActive
        {
            get
            {
                return (StartDate < DateTime.Now || StartDate == null) && (EndDate > DateTime.Now || EndDate == null);
            }
        }
   public DateTime? StartDate{get;set;}
   public DateTime? EndDate{get;set;}
} 

查询类似于

Datacontext.Users.Where(u => u.IsActive)

你得到

成员"User.IsActive"不支持转换为SQL。

我们正在考虑首先迁移到 EF 代码,我很好奇是否存在同样的问题,如果不存在,EF 如何以不同的方式解决它?

如果你有一个用户 DTO 类(它不是 Linq2sql 实体的部分),那么投影到该类应该没有问题。

public class UserDTO
{
   public bool IsActive{get;set;}
   public DateTime? StartDate{get;set;}
   public DateTime? EndDate{get;set;}
} 
public IList<UserDTO> GetActiveUsers()
{
  using(var db = new DbContext())
  {
      var users = GetUsers(db);
      return users.Where(u => u.IsActive).ToList();
  }
}
private IQuerable<UserDTO> GetUsers(DbContext db)
{ 
    return (from u in db.Users
            select new UserDTO()
            {
               StartDate = u.StartDate,
               EndDate   = u.EndDate,
               IsActive  = (u.StartDate < DateTime.Now || u.StartDate == null) && (u.EndDate > DateTime.Now || u.EndDate == null)
            });
}

最新更新