LINQ2SQL实体框架中是否存在对SQL的支持转换?

时间:2012-11-26 23:07:52

标签: c# .net entity-framework linq-to-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)

你得到了

  

会员&#39; User.IsActive&#39;没有受支持的SQL翻译。

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

1 个答案:

答案 0 :(得分: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)
            });
}