2016-06-16 10 views
0

私の人生のために、実際にレコードセットを更新するLINQを得ることができません。現時点では、データベースに新しい行を追加することに成功しています。LINQを介してデータベースを更新

以下のコードを説明するには、 私は列の魔法使いを通ってループしています。 filterFromは、foreachループを開始する日付であり、filterToループの終了日です。すべてはDateRangeメソッドによって行われます。そのためのコードが必要な場合は、そう言いますが、foreachループそのものがうまくいきます。

は、その後私は何をしようとしていることは、レコードセットの日付は、LINQ、p.Date_Data == day経由 が存在すると列p.Time_Data_2p.Time_Data_1がNULL値でない場合、その列Info_Dataを更新するかどうかを確認するテストです。しかし、何が起きているのかは、クエリのデータだけで新しい行を追加して、既存のデータを更新しないことです。

foreach (DateTime day in DateRange(filterFrom, filterTo)) 
{ 
    if (sql.Staff_Time_TBLs.Any(p => p.Date_Data == day && p.Staff_No == SelectedEmployee && p.Time_Data_1 != null && p.Time_Data_2 != null && p.Info_Data == null)) 
    {  
     Staff_Time_TBL updateRow = new Staff_Time_TBL 
     {        
      Info_Data = "myValue",        
     };  
     sql.Staff_Time_TBLs.InsertOnSubmit(updateRow); 
    } 
    sql.SubmitChanges(); 
} 

これを修正してデータを更新し、データベースに新しいデータ行を作成しないようにするにはどうすればよいですか?

+0

あなたが 'InsertOnSubmit'メソッドを呼び出す' if'ステートメントでは、 'update'メソッドを呼び出さなければならないと思います。これは私があなたの '質問'から理解したものです。私が間違っていると私を訂正します。 – Chaitanya

+0

@Chaitanya、 'if'ステートメントは問題の列がヌル値ではないことをテストするためのものです。次の行のデータ。私はそれがここの問題だとは思わない。何が起こるかは、 'if'ステートメント内のクエリは、既存のデータを更新するだけでなく、新しい行にデータを追加することです。それとも、それは私がこれを理解していないところですか? – KyloRen

+0

新しいオブジェクトを新しく作成して保存するときに、なぜあなたは 'UPDATE'を期待していますか? – Maarten

答えて

1

レコードが存在するかどうかを確認していますが、更新するためにレコードを取得しようとするので、Anyの代わりにFirstOrDefaultを使用する必要があります。

var staffTime = sql.Staff_Time_TBLs.FirstOrDefault(p => p.Date_Data == day && 
    p.Staff_No == SelectedEmployee && p.Time_Data_1 != null && p.Time_Data_2 != null && 
    p.Info_Data == null); 

if (staffTime != null) 
{ 
    staffTime.Info_Data = "myValue"; 
    sql.SubmitChanges(); 
} 
+0

助けてくれてありがとう。これは私のために働いていないようですか? – KyloRen

+0

@KyloRen - ブレークポイントを設定し、 'staffTime'が見つかった(ヌルでない)ことができますか? –

+0

はい、null値を返しています。 – KyloRen

関連する問題