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();
答
为了更新数据,则不能使用匿名类型。
相反,您可以用select u;
来结束您的查询来选择实际的实体。
+0
+1。不知道downvote从哪里来,但这是完全正确的。 – 2011-01-28 16:22:15
答
表,应该有主键。
这正是我需要感谢的亚当。 – 2011-01-28 18:36:13