[英]C# Trouble updating record with LINQ
public static bool CheckLogin(string Username, string Password, bool AutoLogin)
{
bool LoginSuccessful;
// Trim inputs and verify lengths
Username = Username.Trim();
Password = Password.Trim().ToLower();
// Get the associated user records
DataClassesDataContext db = new DataClassesDataContext();
var q = (from User in db.tblForumAuthors where User.Username == Username select new
{
User.Password,
User.Salt,
User.Username,
User.Author_ID,
User.User_code,
User.Active,
User.Login_attempt,
User.Last_visit,
}).SingleOrDefault();
// Invalid details passed
if (q == null)
{
LoginSuccessful = false;
}
else
{
// Increment login attempts counter
int LoginAttempts = q.Login_attempt;
LoginAttempts++;
// Encrypt the password
string HashedPassword = GetSha1(Password + q.Salt);
// Check passwords match
if (q.Password == HashedPassword)
{
LoginSuccessful = true;
}
else
{
LoginSuccessful = false;
// Increment login attempts
q.Login_attempt = LoginAttempts;
db.SubmitChanges();
}
}
return LoginSuccessful;
}
}
在线上
q.Login_attempt = LoginAttempts;
我得到:
Error 50 Property or indexer 'AnonymousType#1.Login_attempt' cannot be assigned to -- it is read only C:\\inetpub\\wwwroot\\ScirraNew\\App_Code\\Login.cs 82 17 C:\\...\\ScirraNew\\
谁能告诉我如何更新记录中的此计数器?
如果要编辑整个User项目,则只需选择整个User项目。 摆脱整个“ Select New”子句。
您无法更新匿名类实例的属性(即使您所做的更改只是本地的,并且与数据库中的任何User实体都不相关,因为匿名类实例是您要投影的新对象) ,则必须选择User
实体本身进行更新。
所以代替:
var q = (from User in db.tblForumAuthors
where User.Username == Username
select new
{
User.Password,
User.Salt,
User.Username,
User.Author_ID,
User.User_code,
User.Active,
User.Login_attempt,
User.Last_visit,
}).SingleOrDefault();
采用:
var q = (from User in db.tblForumAuthors where User.Username == Username select User).SingleOrDefault();
或使用lambda语法:
var user = db.tblForumAuthors.Where( u => u.UserName == UserName)
.SingleOrDefault();
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.