Linq to SQL更新数据

问题描述:

我刚开始使用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; 
} 

这是任何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

为了更新数据,则不能使用匿名类型。
相反,您可以用select u;来结束您的查询来选择实际的实体。

+0

+1。不知道downvote从哪里来,但这是完全正确的。 – 2011-01-28 16:22:15

表,应该有主键