2011-03-20 63 views
0
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; 
    } 
} 

上线C#顺利更新记录与LINQ

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\

谁能告诉我我怎么能在记录更新这个柜台吗?

回答

5

如果你想编辑它,你只需要选择整个用户项目。摆脱你的整个“选择新”子句。

2

您无法更新匿名类实例的属性(即使您可以更改只是本地的,并且不与数据库中的任何用户实体相关,因为匿名类实例是一个新的且不同的对象,您正在投影),您必须选择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(); 
+0

+1的λ/方法的语法(我讨厌查询语法) – jlnorsworthy 2011-03-22 07:08:22