2011-01-28 9 views
2

私は、データアクセスのためにSQLにlinqを使用し始めました。読み取り専用の場合は正常に動作しています。しかしそれは更新のために働かない。私はいくつかのフォーラムでスレッドを読んできました。匿名型(私の場合は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; 
} 

答えて

5

これは任意のORMツールの場合です。 CRUD操作を実行する場合に.dbmlファイルを作成するときに、LINQ-to-SQLによって生成されるエンティティタイプを使用する必要があります。

また、クエリが2回実行されていて同時に安全でないことに注意してください。 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

これはまさに私がアダムに感謝する必要があるものです。 –

4

データを更新するために読み込まれ、あなたは匿名で使用することはできませんタイプ。
代わりに、select u;でクエリを終了して、実際のエンティティを選択することができます。

+0

+1。そのdownvoteがどこから来ているのかわからないが、これは完全に正しい。 –

0

表は、プライマリキーを持っている必要があります。

関連する問題