2011-11-09 5 views
0
  • 私はデータベースから最初にデータのセットを読みます。
  • 同じテーブルに同じデータを使って新しいレコードを挿入します。

私はこれを試してみましたが、: -linqを使用してデータベースに読み込んで挿入する方法は?

using (var db = new 
    DataContext(ConfigurationManager.ConnectionStrings["DB"].ToString())) 
{ 
    var items = from t in db.Table1 
       where t.ID.Equals(100) 
       select t; 
    foreach (var item in items) 
    { 
     using (var db1 = new 
      DataContext(ConfigurationManager.ConnectionStrings["DB"].ToString())) 
     { 
      Table1 tab = new Table1 
      { 
       FName = item.FName, 
       LName = item.LName, 
       Number = item.Number, 
      }; 
      db1.Table1.InsertAllOnSubmit(tab); 
      db1.SubmitChanges(); 
     } 
    } 
} 

私はそれをコンパイルすることはできません。それはラインでこのエラーがスローされます 'db1.Table1.InsertAllOnSubmit(タブ)': -

'System.Data.Linq.Table.InsertAllOnSubmit(System.Collections.Generic.IEnumerable') を推測することはできません使い方から型引数 を明示的に指定してみてください。

+1

しかし、何が問題ですか? – Pleun

+0

私は自分の質問を更新しました。ご確認ください – User13839404

+0

あなたのIDは本当にユニークですか? – Pleun

答えて

2

コードにはいくつかの欠陥があります。

あなたは(IDは一意であると仮定して)1表1を読んでいるように見えるが、あなたはとにかく一度に1 TABLE1を追加するので、あなたは、コレクションのよう

クイック試して、それを処理している:

db1.Table1.InsertAllOnSubmit(tab); 

を交換してください

db1.Table1.InsertOnSubmit(tab); 

ことによって、あなたのIDが一意で試していない場合は、次の

List<Table1> items = (from t in db.Table1 
      where t.ID.Equals(100) 
      select t).ToList(); 

コードの残りの部分は同じまま(まだInsertAllOnSubmitを交換する)ことができます

更新

あなたはBIGTIME簡素化することができます:あなたはあなたのIDは100%確信している場合

using (var db = new 
DataContext(ConfigurationManager.ConnectionStrings["DB"].ToString())) 
{ 
Table1 thisTable = (from t in db.Table1 
      where t.ID. == 100 
      select t).SingleOrDefault(); 

if (thisTable != null) 
{ 
     Table1 tab = new Table1() 
     { 
      FName = item.FName, 
      LName = item.LName, 
      Number = item.Number,    }; 
      db.Table1.InsertOnsubmit(tab) 
      db.SubmitChanges(); 
     } 
} 
} 

を.SingleOrDefault()の代わりに.Single()を使用すると常に一致します。結果が一致しない場合、Singleは例外をスローします。この場合、SingleOrDefaultはNULLを返します。

+0

IDはユニークな主キーです。 InsertALLONSubmitからInsertOnSubmitに変更すると、コンパイルできます。しかし、私はIDがユニークであるので、私はforeachループが必要かと疑問に思います。私は常に1つのレコードしか返しません。 – User13839404

+0

いいえ、私は私の答えを更新します – Pleun

関連する問題