不包含定义或扩展方法-当它包含时
本文关键字:包含时 方法 扩展 包含 定义 | 更新日期: 2023-09-27 17:51:01
我已经将服务添加到我的MVC/EF项目中,作为控制器和存储库之间的层。
我在从repo复制一个方法到服务时遇到了麻烦。我试图在服务中使用Count()
,但一直收到错误does not contain a definition for 'Count' and no extension method 'Count' accepting a first argument of type .. could be found
我已经实现了完全相同的方式作为存储库,所以我不知道为什么它失败
存储库:
public abstract class Repository<CEntity, TEntity> : IRepository<TEntity> where TEntity : class
where CEntity : DbContext, new()
{
private CEntity entities = new CEntity();
protected CEntity context
{
get { return entities; }
set { entities = value; }
}
public virtual int Count
{
get { return entities.Set<TEntity>().Count(); }
}
public virtual IQueryable<TEntity> All()
{
return entities.Set<TEntity>().AsQueryable();
}
}
public interface IRepository<TEntity> : IDisposable where TEntity : class
{
int Count { get; }
IQueryable<TEntity> All();
}
服务:
public class CampaignService : ICampaignService
{
private readonly IRepository<Campaign> _campaignRepository;
public CampaignService(IRepository<Campaign> campaignRepository)
{
_campaignRepository = campaignRepository;
}
public int Count
{
get { return _campaignRepository.Count()**; }
}
public IQueryable GetAll()
{
return _campaignRepository.All();
}
}
public interface ICampaignService
{
int Count{ get; }
IQueryable GetAll();
}
**本行失败
'错误4 ' marketingsystem . repository . common。IRepository'不包含'Count'的定义,也没有扩展方法'Count'接受类型为' marketingsystem . repositores . common '的第一个参数。可以找到IRepository'(您是否缺少using指令或程序集引用?)
GetAll()
/All()
方法工作良好,但Count()
不行。
谁能指出并解释我错在哪里?
您正在尝试在存储库上调用Count()
。您的存储库既不是IQueryable<T>
也不是IEnumerable<T>
,因此扩展方法Count()
对您不可用。实际上你的仓库只实现了IRepository<TEntity>
,它只有三个成员可用——Dispose()
, Count
和All()
。我认为你需要从这个接口调用Count
属性。
get { return _campaignRepository.Count; }
注意- Count
不是一个方法-它是一个属性
remove ()
public int Count
{
get { return _campaignRepository.Count; }
}
Count是Repository中的一个属性,但是您正在访问它作为一个方法