linq - 更新动态列问题

标签 linq entity-framework

我正在尝试更新表 emp 中的值。要更新哪一列是动态的。

public void updateEmployees(List<String> columnDb, List<String> columnValues)
{
   var data = ctx.tblEmployee.Where(e => e.Id == empId).Select(e => e).SingleOrDefault();
   ....

   data.columnDb = columnValues; // Pseudo       

   ctx.tblEmployee.Add(data);
   ctx.SaveChanges();
}

如何更新作为参数动态传递的列?

最佳答案

您可以利用反射的力量来做到这一点。

只需迭代对象的属性并为列表中的属性设置值即可。

首先,让我们使用参数中的属性名称和值构建一个字典,以便更轻松地访问值:

var values = columnDb.Zip(columnValues,
        (name, value) => new { Name = name, Value = value })
        .ToDictionary(x => x.Name, x => x.Value);

现在,迭代属性并设置值:

var data = ctx.tblEmployee.SingleOrDefault(e => e.Id == empId);
foreach(PropertyInfo property in data.GetType().GetProperties())
{
    // Check if property should be updated
    if(values.ContainsKey(property.Name))
    {
        var value = values[property.Name];
        // Change the type of the value to the type of the property
        object converted = Convert.ChangeType(value, property.PropertyType);
        // Set the property value
        property.SetValue(data,values[property.Name]);
    }
}

当然,上面的代码假设字符串和数据对象的属性类型之间存在转换。

关于linq - 更新动态列问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26293792/

相关文章:

linq - 使用 LINQ to SQL 从存储过程中获取多维结果

asp.net-mvc - Entity Framework 中的 SaveChanges 会包装数据库事务中的所有更改

entity-framework - 使用两个 EDMX 文件(一个 dbContext,另一个常规 EDMX)时出错

c# - 使用 EntityFramework 删除单元格值

.net - 使用LINQ to SQL的关系表上的动态Where子句

c# - 在 LINQ 中分组

mysql - 使用 LINQ/lambda .net MVC 从表中选择某些列的所有数据?

linq - 不明确的调用 IQueryable 或 IEnumerable

asp.net - 从模型状态验证中删除对象

c# - System.Data.SQLite 有多稳定