通过LINQ更新数据库

时间:2016-06-16 08:43:12

标签: c# linq

对于我的生活,我无法让LINQ实际更新记录集。目前,我所做的就是在数据库中添加一个新行。

要解释下面的代码, 我正在循环通过一个拥有日期的列。 filterFrom是在循环中开始foreach循环和filterTo结束日期的日期。所有这些都是通过DateRange方法完成的。如果需要代码,请说明,但foreach循环本身正如它应该的那样工作。

然后我要做的是测试以查看记录集的日期是否存在 通过LINQ p.Date_Data == day,如果列p.Time_Data_2p.Time_Data_1不是空值,则更新列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();
}

我如何修改它以便更新数据而不在数据库中创建新的数据行?

1 个答案:

答案 0 :(得分:1)

您正在检查记录是否存在,但您还应该尝试检索该记录以进行更新,因此您应该使用FirstOrDefault而不是Any

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();
}