有条件地更新 Linq-to-SQL
本文关键字:Linq-to-SQL 更新 有条件 | 更新日期: 2023-09-27 18:33:29
我有一个查询来更新记录;它看起来有点像这样:
public void SaveRecord(int TheUserID, Nullable<DateTime> TheDate,
Nullable<int> TheAction)
{
using DC...
{
var TheRecordToUpdate = (from....where ....
select l).Single();
TheRecordToUpdate.TheDate = TheDate;
TheRecordToUpdate.TheAction = TheAction;
TheDC.SubmitChanges();
问题是有时我提供空参数,在这种情况下,我不想更改数据库中的字段。如何使用 ??当参数为 null 时,在 linq-to-SQL 中使用运算符?
谢谢。
您可以使用??
运算符
TheRecordToUpdate.TheDate = TheDate ?? TheRecordToUpdate.TheDate ;
或者如果你想更明确地写它
if (TheDate.HasValue){
TheRecordToUpdate.TheDate = TheDate;
}
但是,如果TheRecordToUpdate.TheDate
不是可为空的属性,则必须编写
if (TheDate.HasValue){
TheRecordToUpdate.TheDate = TheDate.Value;
}
您可以尝试像这样使用 ??
运算符:
TheRecordToUpdate.TheDate = TheDate ?? TheRecordToUpdate.TheDate;
如果TheDate
null
,它将使用现有值更新字段。linq 设计器和 SQL metal 生成的代码包含防止分配相同值的保护措施,因此这不应触发数据库更新:
set
{
if ((this._TheDate != value))
{
this.OnTheDateChanging(value);
this.SendPropertyChanging();
this._TheDate = value;
this.SendPropertyChanged("TheDate");
this.OnTheDateChanged();
}
}
无论如何,我认为使用普通的if
语句更具可读性:
if (TheDate != null)
{
TheRecordToUpdate.TheDate = TheDate;
}
作为旁注,您没有遵循变量的正常大小写约定。 TheDate
参数通常写theDate
。
下面的技巧应该有效。
TheRecordToUpdate.TheDate = TheDate ?? TheRecordToUpdate.TheDate;
TheRecordToUpdate.TheAction = TheAction ?? TheRecordToUpdate.TheAction;
如果参数为 null,则更新值,但使用以前的值,因此它保留其以前的值。
你可以根据
@sarwar026使用三元更新到现在的样子,我个人不喜欢它,它依赖于下游功能检测到的数据的不变化。我只是把它包在if TheDate.HasValue
等。看不出这么聪明有什么价值。