1

我们在 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 如何以不同的方式解决它?

4

1 回答 1

2

如果您有一个用户 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)
            });
}
于 2012-11-26T23:46:18.660 回答