【问题标题】:Dynamically update table using Dynamic LINQ使用动态 LINQ 动态更新表
【发布时间】:2021-06-22 15:09:50
【问题描述】:

我有一个列名列表,我想动态更新表并将这些列的所有行设置为 NULL。当前代码使用if逻辑,当列列表发生变化时需要不断更新

var columns = new string[] {"FirstName","LastName"};
using(var scope = new TransactionScope())
{
     foreach(var col in columns)
     {
       if(col == "FirstName")
       {
          dbContext.Users
                .Where(x=>x.ParentID = 1234)
                .Update(x=> new User()
                { 
                   FirstName = null
                }
       }

       if(col == "LastName")
       {
          dbContext.Users
                .Where(x=>x.ParentID = 1234)
                .Update(x=> new User()
                { 
                   LastName = null
                }
       }   
     
     }

     scope.Complete();
}

我还在使用Dynamic LINQZ Framework 和EF 6。有没有办法动态更新表的某些列? (我也可以构造 sql 更新字符串作为 CommandText 执行,但我试图避免这种情况)

【问题讨论】:

    标签: entity-framework-6 dynamic-linq entity-framework-plus entity-framework-extensions dynamic-linq-core


    【解决方案1】:

    免责声明:我是项目的所有者Entity Framework Plus

    类似于 EF Extensions 中的 UpdateUpdateFromQuery 允许使用 ExpandoObjectIDictionary<string, object>

    例如:

    Dictionary<string, object> dict = new Dictionary<string, object>();
    dict.Add("FirstName", null);
    
    dbContext.Users
            .Where(x=>x.ParentID = 1234)
            .UpdateFromQuery(dict);
    

    下周Update方法也会支持,这个时候我会更新我的答案。

    更新

    由于v5.1.29Update方法也支持字典

    Dictionary<string, object> dict = new Dictionary<string, object>();
    dict.Add("FirstName", null);
    
    dbContext.Users
            .Where(x=>x.ParentID = 1234)
            .Update(dict);
    

    【讨论】:

      猜你喜欢
      • 2011-04-10
      • 1970-01-01
      • 2022-07-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多