2016-04-13 13 views
0

私はリストを持っており、テーブルの2つのフィールドを更新したいと思います。 2つのフィールドは、CatId を使用して行を識別するCustOrderNumberおよびCustomerRefnumberです。テーブルの2つのフィールドを更新する

これらの2つのフィールドをIDに基づいて効率的に更新するにはどうすればよいですか?ここで

はここ

  public class Catalog 
      { 
       public Int32 CatId { get; set; } 
       public string Ischecked { get; set; } 
       public string CustOrderNumber { get; set; } 
       public string CustomerRefnumber { get; set; } 
      } 

あなたはあなたのメソッドに渡されたそれらの項目のためのDBからのカタログのを取得する必要がありますコレクション

  public List<Catalog> WriteToDB(List<Catalog> objCat) 
      { 
       DataCollectEntities _objDataCollect = new DataCollectEntities(); 

       foreach(var item in objcat) 
       { 


       } 

      } 
+0

あなたのループの中でこの 'var obj = _objDataCollect.Catalog.Where(x => x.CatId == item.CatId).Single()'を実行し、このobjをobj.CustOrderNumberのような新しい値で更新します= item.CustOrderNumber'は他のプロパティと同じです...次にサイドループに '_objDataCollect.SaveChanges()'を書きます。 –

答えて

0

を処理する方法であるモデルです。各項目のプロパティ値を更新して元に戻します。

public List<Catalog> WriteToDB(List<Catalog> objCat) 
{ 
    var ids = objCat.Select(s=>s.CatId); 

    var db = new DataCollectEntities(); 
    var catalogList= db.Catalogs.Where(s=>ids.Contains(s.CatId)).ToList(); 

    foreach(var item in catalogList) 
    { 
     var c= objCat.FirstOrDefault(x=>x.CatId==item.Id); 
     if(c!=null) 
     { 
     item.CustomerRefnumber = c.CustomerRefnumber; 
     item.CustOrderNumber = c.CustOrderNumber ; 
     } 
    } 
    db.SaveChanges(); 
} 

実行されたSQLクエリの数は?

データベースからカタログを取得するためのselect文。 Nは、あなたがあなたが3つのカタログを更新しようとしている場合、このコードは、DBにヒットする

を更新するレコード(カタログ)の数は、各レコードを更新するための

N更新ステートメント(複数可) 1 + 3 = 4回。

+0

ありがとうございます。これがより効率的だと言っていますか?私は更新するために約150の行を持っているかもしれません。それは私がデータベースに150回ヒットすることを意味しますか? – user2320476

+0

ObjCatはデータベースを更新するために使用する新しいリスト – user2320476

+0

古い学校(ただし最高のパフォーマンス)ADO.NETを使用して、すべてのレコードに対して巨大なUPDATEステートメントを実行できます。 SQL文字列を渡すための別の方法があります。だから、あなたのN個のレコードをいくつかのバッチに分割して実行する必要があるかもしれません。 dbContextには、必要に応じて使用できる 'Database.ExecuteSqlCommand'メソッドがあります。 – Shyju

関連する問題