Linq to SQL Обновление данных - PullRequest
2 голосов
/ 28 января 2011

Я только начинаю использовать linq to sql для доступа к данным.Он работает нормально только для чтения.Но это не работает для обновления.Я читал темы на нескольких форумах.Понятно, что анонимные типы (в моем случае 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;
}

Ответы [ 3 ]

5 голосов
/ 28 января 2011

Это относится к любому инструменту ORM;вам придется использовать типы сущностей, которые LINQ-to-SQL генерирует для вас при создании файла .dbml, если вы хотите выполнять операции CRUD.

Кроме того, помните, что ваш запрос выполняется дважды ине является одновременно безопасным;вызов 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();
4 голосов
/ 28 января 2011

Для обновления данных вы не можете использовать анонимные типы.
Вместо этого вы можете завершить запрос с помощью select u;, чтобы выбрать действительные объекты.

0 голосов
/ 04 ноября 2014

Таблица, которую вы пытаетесь обновить с помощью LINQ, должна иметь Первичный ключ .

...