动态选择表中的字段进行更新

时间:2013-12-17 22:29:51

标签: c# .net linq

如何编写更新语句来更新数据库中的表,每个更新的字段不同?并使用Linq to SQL。搜索过StackOverFlow和google之后,我发现了与动态选择语句相关的所有内容,我不需要这样做。

一些有用的信息:

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

我目前执行单独的函数来执行FirstName的更新,下一个执行LastName等。我想将这些函数组合成1个函数,可以将给定的字段更新为给定的值,我使用Linq to Sql。 / p>

让我知道这是否仍然是泥巴。

每次评论清理泥浆:澄清我使用Linq to 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();
  ...    }

回顾一下,我想要一个方法,它将根据传入字段名称和值副本进行更新,不得不进行多个更新语句。

编辑:代码已更新,以提供更多功能方法。代理只是模型数据上下文的名称,如前所述,它使用Linq到Sql连接。

1 个答案:

答案 0 :(得分:1)

如果你想让一个函数执行各种更新,你可以创建一个接受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.
}