最初获得以下代码。如果得到更改,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)
{
...
}