我有一个将数据选择为自定义类型的查询-
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();