我们已经在我们的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如何以不同的方式解决它?
答案 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)
});
}