簡體   English   中英

C#無法使用LINQ更新記錄

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

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM