C# Linq到SQL更新数据

C# Linq到SQL更新数据,c#,asp.net,database,linq-to-sql,C#,Asp.net,Database,Linq To Sql,我刚刚开始使用LINQtoSQL进行数据访问。对于只读,它可以正常工作。但它不适用于更新。我已经在几个论坛上阅读了这些帖子。很明显,我的案例中的匿名类型var无法更新。我找不到应该用什么替换var以及在哪里找到它。我将感谢任何帮助 下面是代码。例外是 错误1属性或索引器“AnonymousType1.date\u last\u logon”无法分配给-它是只读的 为了更新数据,不能使用匿名类型。 相反,您可以使用select u结束查询;选择实际实体。任何ORM工具都是如此;如果要执行CRUD操

我刚刚开始使用LINQtoSQL进行数据访问。对于只读,它可以正常工作。但它不适用于更新。我已经在几个论坛上阅读了这些帖子。很明显,我的案例中的匿名类型var无法更新。我找不到应该用什么替换var以及在哪里找到它。我将感谢任何帮助

下面是代码。例外是

错误1属性或索引器“AnonymousType1.date\u last\u logon”无法分配给-它是只读的


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

任何ORM工具都是如此;如果要执行CRUD操作,则在生成.dbml文件时,必须使用LINQ to SQL为您生成的实体类型

另外,请注意,您的查询被执行了两次,并且不是同时安全的;调用Count使用数据库中的Count聚合执行查询,然后循环执行查询,这次返回结果。考虑到您正在做的事情,这可能会更好:

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();

您尝试使用LINQ更新的表应具有主键

+1。我不知道那次否决票是从哪里来的,但这是完全正确的。
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();