我有以下函数,它实际上是 Z.EntityFramework.Plus 批量更新的包装器:
public static int UpdateBulk<T>(this IQueryable<T> query, Expression<Func<T, T>> updateFactory) where T : IBaseEntity, new()
{
Expression<Func<T, T>> modifiedExpression = x => new T() { ModifiedBy = "Test", ModifiedDate = DateTime.Now };
var combine = Expression.Lambda<Func<T, T>>(
Expression.AndAlso(
Expression.Invoke(updateFactory, updateFactory.Parameters),
Expression.Invoke(modifiedExpression, modifiedExpression.Parameters)
),
updateFactory.Parameters.Concat(modifiedExpression.Parameters)
); //This returns an error
return query.Update(combine);
}
像这样调用:
decimal probId = ProbId.ParseDecimal();
db.Problems
.Where(e => e.ProbId == probId)
.UpdateBulk(e => new Problem() {
CatId = Category.ParseNullableInt(),
SubCatId = SubCategory.ParseNullableInt(),
ListId = Problem.ParseNullableInt()
});
其中 IBaseEntity 定义如下:
public abstract class IBaseEntity
{
public System.DateTime CreatedDate { get; set; }
public string CreatedBy { get; set; }
public System.DateTime ModifiedDate { get; set; }
public string ModifiedBy { get; set; }
public string DeletedBy { get; set; }
}
顺便说一下,“问题”类实现了 IBaseEntity。
我想要做的是自动将 ModifiedBy 和 ModifiedDate 附加到 UpdateBulk 函数中的 updateFactory,这样就不必在每次调用 UpdateBulk 时都这样做。
我尝试在上面的 UpdateBulk 函数中将解析的“updateFactory”表达式与“modifiedExpression”结合起来,但它返回错误:
没有为类型“问题”定义二元运算符 AndAlso
是否可以像这样合并表达式,如果可以,我做错了什么?如果没有,我如何将 ModifiedBy = "Test", ModifiedDate = DateTime.Now 合并到 updateFactory 表达式中?
谢谢, 罗德