Linq to SQL更新数据

Bob*_*one 2 c# database asp.net linq-to-sql

我刚刚开始使用linq to sql进行数据访问.它只适用于只读.但它不适用于更新.我一直在阅读几个论坛的主题.很明显,无法更新匿名类型(在我的情况下为var).我找不到我应该替换var和我找到它的地方.我将不胜感激任何帮助.

下面是代码.例外是

错误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;
}
Run Code Online (Sandbox Code Playgroud)

Ada*_*son 5

任何ORM工具都是这种情况; 如果要执行CRUD操作,则必须使用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();
Run Code Online (Sandbox Code Playgroud)