我很热情地在EF Core 7中找到了ExecuteDeleteAsync和ExecuteUpdateAsync,它们帮助我的代码变得更简单、更快,不需要使用自制的过程来批量删除或更新1-2个字段,反正我也有在运行时需要选择数据库的确切表和字段进行更新的情况。
我可以使用数据库表:
public static IQueryable<object> Set(this DbContext context, Type entity) =>
context.ClrQuery(context.ClrType(entity));
我有方法让表达式过滤行:
public static IQueryable Where(this IQueryable source, string equalProperty, object value, [NotNull] Type EntityType)
{
PropertyInfo? property = EntityType.GetProperty(equalProperty);
if (property == null)
throw new NotImplementedException($"Type {EntityType.Name} does not contain property {equalProperty}");
ParameterExpression parameter = Expression.Parameter(EntityType, "r");
MemberExpression member = Expression.MakeMemberAccess(parameter, property);
LambdaExpression whereExpression = Expression.Lambda(Expression.Equal(member, Expression.Constant(value, property.PropertyType)), parameter);
MethodCallExpression resultExpression = WhereCall(source, whereExpression);
return source.Provider.CreateQuery(resultExpression);
}
因此,我可以使用以下命令查找要更新的行
IQueryable Source = db.Set(EntityType).Where(FieldName, FieldValue, EntityType);
我应该创建表达式来更新IQueryable ExecuteUpdateQuery = Source.ExecuteUpdateAsync(EntityType, FieldName, FieldValue);
访问SetProperty表达式的方法是什么?
2条答案
按热度按时间0ve6wy6x1#
尝试以下扩展。我还更正了方法签名:
并实现:
wqsoz72f2#
谢谢,效果很好.