[英]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.