1

私たちはしばらくの間、mvc プロジェクトで LINQ2SQL を使用してきました。

私たちが常に直面する問題の 1 つは、「サポートされている 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 コードに移行することを検討していますが、これと同じ問題が存在するかどうかに興味があります。

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 に答える