在Servicestack Ormlite

时间:2015-11-19 08:55:20

标签: c# servicestack ormlite-servicestack

我们的代码中目前有逻辑忽略具有忽略值的属性(例如,如果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);
    }
}

1 个答案:

答案 0 :(得分:2)

在C#中动态创建匿名类型与创建普通类型by using Reflection.Emit相同。

但在这种情况下,使用SqlExpression重载更容易,例如:

db.UpdateOnly(dbProduct, q => q
    .Update(new[]{ "Field1" }.ToList())
    .Where(p => p.Id == dbProduct.Id));