我有一个查询将数据选择为自定义类型-
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();
话虽如此,cdonner 的建议非常好。