我的代码中具有此功能:
public virtual bool Exists<ENTITY>(Expression<Func<ENTITY, bool>> expr)
{
return this._dbSet.Count(expr) > 0;
}
我收到错误
无法将System.Linq.Expressions.Expression
>转换为 System.Func
现在我是否可以将功能更改为此:
public virtual bool Exists<ENTITY>(Expression<Func<ENTITY, bool>> expr)
{
var tmp = expr.Compile();
return this._dbSet.Count(tmp) > 0;
}
我遇到另一个错误:
无法将System.Func
转换为 System.Linq.Expressions.Expression >
我在做什么错或者编译器发疯了?我正在使用VS2017 C#7.1
答案 0 :(得分:1)
您没有发布完整的代码,所以我在这里猜测:
您的类已经是通用的,带有参数ENTITY
。因此,删除<ENTITY>
中的Exists<ENTITY>
,因为这意味着您的方法是通用的且不同于类。但是它必须与类和您的DbSet
相同,是通用参数,因此只需使用该类的通用参数即可。
class Repository<ENTITY>
{
public virtual bool Exists(Expression<Func<ENTITY, bool>> expr)
{
return this._dbSet.Count(expr) > 0;
}
}
旁注:EXISTS可能是.Any()
,而不是.Count() > 0
。
答案 1 :(得分:1)
假设,您要对_dbSet
中满足谓词的实体进行计数-以便在编译后检查是否有任何元素表达式树
var tmp = expr.Compile();
您应该添加以下内容:return this._dbSet.Where(entity => tmp(entity).Count() > 0;
更新
正如nvoigt在他的回答中指出的那样,使用Any
方法更合乎逻辑:
return this._dbSet.Any(entity => tmp(entity));