在表中动态选择要更新的字段

本文关键字:更新 字段 选择 动态 | 更新日期: 2024-10-21 00:04:52

如何编写更新语句来更新数据库中的表,并且每次更新的字段都不同?并将Linq应用于SQL。在搜索了StackOverFlow和谷歌之后,我发现了与动态选择语句相关的一切,而我并不需要这些语句。

一些信息可以帮助:

我有一个名为Persons的表,其中有典型的字段:FirstName、LastName、Phone、Address、City、State等。

我目前做单独的函数来更新FirstName,下一个更新LastName,等等。我想把它们组合成一个函数,可以将给定的字段更新为给定的值,我正在使用Linq到Sql。

如果这还像泥一样清澈,请告诉我。

根据评论清理泥浆:为了澄清,我正在使用Linq到Sql。

代码信息:

bool UpdatePersonFirstName(string FirstName, Int PersonId)
{
    bool _wasUpdated = false;
    if (PersonId == 0)
          throw new ArguementMissingException();
    using (CustomerModelDataContext proxy = new CustomerModelDataContext())
    {
       try
        {
            var _result = proxy.Persons.SingleOrDefault(_per => _per.PersonId = PersonId)
            _result.FirstName = FirstName;
             proxy.SubmitChanges();
             _isUpdated = true;
         }
         catch (exception ex)
         { 
            throw ex;
          }
     }
     return _isUpdated;
}
bool UpdatePersonAddress(string AddressInfo, Int PersonId)
{
    bool _wasUpdated = false;
    if (PersonId == 0)
          throw new ArguementMissingException();
    using (CustomerModelDataContext proxy = new CustomerModelDataContext())
    {
       try
        {
            var _result = proxy.Persons.SingleOrDefault(_per => _per.PersonId = PersonId)
            _result.Address = AddressInfo;
            proxy.SubmitChanges();
             _isUpdated = true;
         }
         catch (exception ex)
         { 
            throw ex;
          }
     }
     return _isUpdated;
}

对Persons表中的每个可更新字段重复上述操作。

我想完成以下任务:

void UpdatePersonTable(string FieldName, string FieldValue, int PersonId)
{
  ...
  var _result = Proxy.Persons.SingleOrDefault(_per => _per.PersonId = PersonId);
  _result.[Field matching FieldName] = FieldValue;
  Proxy.SubmitChanges();
  ...    }

概括一下,我想要一个方法,它将根据传递字段名称和值来进行更新,vice必须进行多个更新语句。

编辑:更新代码以提供更多函数方法。Proxy只是模型数据上下文的一个名称,正如前面提到的,这是使用Linq到Sql连接。

在表中动态选择要更新的字段

如果你想让一个函数执行所有类型的更新,你可以创建一个接受lamba表达式作为参数的方法

public void Update(Func<T> predicate)
{
    //Use 'predicate' against your data source...
    //Can't provide more code since I don't know if you are using EF, SqlClient, etc.
}