代码之家  ›  专栏  ›  技术社区  ›  Kelly Robins

Linq to SQL-选择新对象并执行更新

  •  0
  • Kelly Robins  · 技术社区  · 17 年前

    我有一个将数据选择为自定义类型的查询-

    UserData curData = dc.Users.Where(λ => (λ.Login == username) && λ.Active) 
        .Select( λ => new UserData { ID = λ.ID, UserName = λ.Login, isAdmin = λ.Admin, isTrusted = λ.Trusted, EMail = λ.E_mail ... });
         //Yeah I know this isn't a technically correct usage of 'λ' 
         //It is just a convenient variable name. Please don't hit me. 
    

    当我获得用户信息时,我希望能够更新诸如“LastIP”和“LastVisit”之类的信息,然后在密码正确且登录成功的情况下提交更改。

    如果我理解正确,新对象将被删除,因此如果我更改它并调用dc.SubmitChanges(),对它的更改将不会被保存。那么在这种情况下执行更新的最佳方式是什么呢。我是否需要再做一次选择并修改那里的数据,有没有办法将其内联到我的初始语句中?

    谢谢你的帮助!


    internal static class auth_extensions
    {  
    
        public static IQueryable<User> Update(this IQueryable<User> data, Action<User> updateDelegate)
        {
            foreach (User cur in data)
            {
                updateDelegate(cur);
            }
            return data;
    
        }
    }
        }
    

    使用程序集中的扩展方法,查询变为-

    UserData curData = dc.Users
        .Where(λ => (λ.Login == username) && λ.Active)
        .Update(λ => {
             λ.LastIP = HttpContext.Current.Request.UserHostAddress; 
             λ.lastVisit = DateTime.Now; 
        })
        .Select(loadDelegate).SingleOrDefault();
    

    2 回复  |  直到 17 年前
        1
  •  1
  •   cdonner    17 年前

    User curData = dc.Users.Where(λ => (λ.Login == username) && λ.Active)
    
        2
  •  0
  •   ALT    13 年前

        using(DbContext dbContext = new DbContext())
        {
            UserData curData = dc.Users.Where(λ => (λ.Login == username) && λ.Active).SingleOrDefault(); // You need(!) to use SingleOrDefault or FirstOrDefault
            if(curData != null) 
            {
                curData.LastIP = 'xx.xx.xx.xx';
                curData.LastVisit = DateTime.Now;
                dbContext.SaveChanges();
            }
        }
    
    推荐文章