【发布时间】:2020-02-14 07:15:13
【问题描述】:
我正在尝试实现定义过滤器的类,以便在将其作为参数传递给我的存储库类 (EF) 中的方法时使其更加明确。
我对从 Expression 到我的类的隐式运算符的定义有疑问。 是否可以实现 fd4 变量附近的语法?
public class FilterDefinition<TEntity>
where TEntity : class
{
public FilterDefinition() { }
public FilterDefinition(Expression<Func<TEntity, bool>> filter)
{
this.Filter = filter;
}
public virtual Expression<Func<TEntity, bool>> Filter { get; set; }
public static implicit operator FilterDefinition<TEntity>(Expression<Func<TEntity, bool>> filter) => new FilterDefinition<TEntity>(filter);
}
public class SomeEntity
{
public bool SomeBool { get; set; }
}
class Program
{
static void Main()
{
FilterDefinition<SomeEntity> fd1 = new FilterDefinition<SomeEntity>(x => x.SomeBool);
FilterDefinition<SomeEntity> fd2 = new FilterDefinition<SomeEntity> { Filter = x => x.SomeBool };
FilterDefinition<SomeEntity> fd3 = (Expression<Func<SomeEntity, bool>>)(x => x.SomeBool);
//FilterDefinition<SomeEntity> fd4 = x => x.SomeBool;
Console.ReadKey();
}
}
FilterDefinition 类的目的是作为参数传递给通用查询存储库。并使用继承定义常用的过滤器。
public class Repository<TEntity> : IRepository<TEntity>
where TEntity : class
{
private readonly DbSet<TEntity> dbSet;
public Repository(DbContext context)
{
this.dbSet = context.Set<TEntity>();
}
public async Task<IEnumerable<TEntity>> GetAsync(
FilterDefinition<TEntity> filter = null,
OrderDefinition<TEntity> order = null,
PagingDefinition paging = null)
{
return await new QueryBuilder<TEntity>(this.dbSet)
.ApplyFilter(filter)
.ApplyOrder(order)
.ApplyPaging(paging)
.ToQuery()
.ToListAsync();
}
【问题讨论】:
-
请将您的代码发布为文本,而不是图片。不,我不认为这是可以做到的。这可能是一个 XY 问题。
FilterDefinition到底是什么意思? -
您不能这样做,原因与不能将 lambda 分配给
var的原因相同。请参阅stackoverflow.com/q/4965576/11683、stackoverflow.com/q/2687942/11683 和 stackoverflow.com/q/411579/11683。
标签: c# .net casting expression operator-keyword