不包含定义或扩展方法-当它包含时

本文关键字:包含时 方法 扩展 包含 定义 | 更新日期: 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(), CountAll()。我认为你需要从这个接口调用Count属性。

get { return _campaignRepository.Count; }

注意- Count不是一个方法-它是一个属性

remove ()

public int Count
{
    get { return _campaignRepository.Count; }
}

Count是Repository中的一个属性,但是您正在访问它作为一个方法