LP13
LP13

Reputation: 34109

Dynamically update table using Dynamic LINQ

I have a list of column names and I want to dynamically update table and set all the rows for those columns to NULL. The current code is using if logic and it need to keep updating when list of columns changes

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();
}

I am also using Dynamic LINQ and Z Framework with EF 6. Is there a way to update table certain columns dynamically? (I can also construct sql update string execute as CommandText but I am trying to avoid that)

Upvotes: 0

Views: 1007

Answers (1)

Jonathan Magnan
Jonathan Magnan

Reputation: 11347

Disclaimer: I'm the owner of the project Entity Framework Plus

The UpdateFromQuery similar to Update from EF Extensions allow to uses ExpandoObject and IDictionary<string, object>

For example:

Dictionary<string, object> dict = new Dictionary<string, object>();
dict.Add("FirstName", null);

dbContext.Users
        .Where(x=>x.ParentID = 1234)
        .UpdateFromQuery(dict);

Next week, the Update method will also support it, I will update my answer at this time.

UPDATED

Since the v5.1.29, the Update method also support dictionary

Dictionary<string, object> dict = new Dictionary<string, object>();
dict.Add("FirstName", null);

dbContext.Users
        .Where(x=>x.ParentID = 1234)
        .Update(dict);

Upvotes: 1

Related Questions