将多个表达式组合为lambda以进行部分更新:表达式<func <t,object =“”>&gt;

时间:2018-02-09 07:50:39

标签: c# linq lambda expression predicate

最初获得以下代码。如果得到更改,columnA和columnB只需要更新。 (我也有columnC等等,但这里只是简短的一个)。但updatedBy和updatedTime总是需要更新。以下方法是检查每个更改并相应地更新列。但这很乏味。

if(isChangeColumnA && isChangeColumnB)
{
    repo.partialUpdate(product, p=> p.columnA, p=> p.columnB, p=> p.UpdatedBy, p=> p.UpdatedTime)
}
else if (isChangeColumnA)
{
    repo.partialUpdate(product, p=> p.columnA, p=> p.UpdatedBy, p=> p.UpdatedTime)
}else if(isChangeColumnB)
{
    repo.partialUpdate(product, p=> p.columnB, p=> p.UpdatedBy, p=> p.UpdatedTime)
}

希望通过以下方式将表达式组合为params来使其更具动态性,所以最后,我只需要将组合表达式作为params传递,而不用麻烦。

Expression<Func<Product, object>>[] updatedExpr = {p=> p.UpdatedBy, p=> p.UpdatedTime};
var combinedExpr = updatedExpr;
if (isChangeColumnA)
{
    Expression<Func<Product, object>> columnAExpr = p => p.columnA;
    combinedExpr = combinedExpr combine with columnAExpr
}else if(isChangeColumnB)
{
    Expression<Func<Product, object>> columnBExpr = p => p.columnA;
    combinedExpr = combinedExpr combine with columnBExpr 
}

repo.partialUpdate(product,combinedExpr);

其他信息,部分更新方法如下:

public void PartialUpdate(TEntity entity, params Expression<Func<TEntity, object>>[] includeProperties)
{
    ...
}

0 个答案:

没有答案