对于我的生活,我无法让LINQ实际更新记录集。目前,我所做的就是在数据库中添加一个新行。
要解释下面的代码,
我正在循环通过一个拥有日期的列。 filterFrom
是在循环中开始foreach
循环和filterTo
结束日期的日期。所有这些都是通过DateRange
方法完成的。如果需要代码,请说明,但foreach
循环本身正如它应该的那样工作。
然后我要做的是测试以查看记录集的日期是否存在
通过LINQ p.Date_Data == day
,如果列p.Time_Data_2
和p.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();
}
我如何修改它以便更新数据而不在数据库中创建新的数据行?
答案 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();
}