2011-01-28 192 views
2

我剛開始使用linq to sql進行數據訪問。它工作正常只讀。但它不適用於更新。我一直在幾個論壇上閱讀主題。很明顯,匿名類型(在我的情況下var)不能更新。我無法找到我應該替換var以及在哪裏找到它。我會感謝任何幫助。Linq to SQL更新數據

以下是代碼。唯一的例外是

錯誤1屬性或索引「AnonymousType#1.date_last_logon」不能被分配到 - 它是隻讀

fmcsaDataContext db = new fmcsaDataContext(); 
// DataTable _UserTable; 
UserModel _UserModel = new UserModel(); 

var users = from u in db.FMCSA_USERs 
      where u.USER_NAME == pName && u.ACTIVE == true 
      select new 
      { 
        date_last_logon = u.DATE_LAST_LOGON, 
        date_current_logon = u.DATE_CURRENT_LOGON, 
        failed_login = u.FAILED_LOGIN, 
      }; 

if (users.Count() == 0) 
    return null; 

foreach (var user in users) 
{ 
    user.date_last_logon = user.date_current_logon; 
} 

回答

5

這是任何ORM工具的情況;如果要執行CRUD操作,則必須使用LINQ-to-SQL在爲您生成.dbml文件時爲您生成的實體類型。

此外,請注意您的查詢正在執行兩次,並且不是同時安全的;調用Count()在數據庫中執行聚合的Count查詢,然後循環執行查詢再次,這次將帶回結果。鑑於你在做什麼,這可能是更好的:您嘗試使用LINQ更新

var users = (from u in db.FMCSA_USERs 
       where u.USER_NAME == pName && u.ACTIVE == true 

       select u).ToList(); // This executes the query and materializes 
            // the results into a List<FMCSA_USER> 

if (users.Count == 0) return null; 

foreach (var user in users) 
{ 
    user.date_last_logon = user.date_current_logon; 
} 

db.SaveChanges(); 
+0

這正是我需要感謝的亞當。 – 2011-01-28 18:36:13

4

爲了更新數據,則不能使用匿名類型。
相反,您可以用select u;來結束您的查詢來選擇實際的實體。

+0

+1。不知道downvote從哪裏來,但這是完全正確的。 – 2011-01-28 16:22:15