我们的代码中目前有逻辑忽略具有忽略值的属性(例如,如果int
属性具有值Int32.MinValue + 1
,那么我们将不会将其包含在SQL更新中。
我可以从对象中构建onlyFields Expression<Func<T, TKey>> onlyFields
对象吗?有没有什么方法可以循环对象中的所有属性并从中构建onlyFields表达式?
public void Update(SSDataProduct dbProduct)
{
using (var db = DbFactory.OpenDbConnection())
{
db.UpdateOnly(dbProduct,
onlyFields: p => new { p.ProductName, p.Density }, // <-- needs to be dynamic
where: p => p.Id == dbProduct.Id);
}
}
答案 0 :(得分:2)
在C#中动态创建匿名类型与创建普通类型by using Reflection.Emit相同。
但在这种情况下,使用SqlExpression
重载更容易,例如:
db.UpdateOnly(dbProduct, q => q
.Update(new[]{ "Field1" }.ToList())
.Where(p => p.Id == dbProduct.Id));