当我们有这个GenericRepository类时,可以在Entity框架中实现FindBy方法:
public class Repository<T> : IRepository<T> where T : class, IAggregateRoot
{
private readonly DbSet<T> _entitySet;
public IQueryable<T> FindBy(Expression<Func<T, bool>> predicate)
{
//IQueryable<T> query=_entitySet.
}
}
在这种情况下如何实现FindBy!??
答案 0 :(得分:1)
这应该有效
public class Repository<T> : IRepository<T> where T : class, IAggregateRoot
{
private readonly DbSet<T> _entitySet;
public IQueryable<T> FindBy(Expression<Func<T, bool>> predicate)
{
return _entitySet.Where(predicate).
}
}
答案 1 :(得分:1)
My Repository有以下方法通过给定表达式返回单个实体。
public T FindSingle(Expression<Func<T, bool>> predicate) {
return _entitySet.FirstOrDefault(predicate);
}
现在调用者可以使用任何表达式来获取单个实体,例如
var entity = _repository.FindSingle(entity=> entity.Id == 23);
或
var entity = _repository.FindSingle(entity=> entity.Name == "Hello World");
如果您的接口IAggregateRoot定义了属性Id,您还可以向通用接口添加一个显式方法,以通过其Id获取单个实体。
public interface IAggregateRoot {
int Id {get;}
}
public class GenericRepository {
public T FindSingleById(int id) {
return _entitySet.FirstOrDefault(entity=>entity.Id == id);
}
}