IEnumerable的<>返回null

时间:2012-08-10 20:39:27

标签: c# asp.net asp.net-mvc model ienumerable

我在代码中返回null:(var cat line)

public class CategoryItemsViewModel
{
    public ICategoriesRepository categoriesRepository;

    public IEnumerable<Categories> GetCategories()
    {
        var cat = categoriesRepository.Categories;

        return cat;

    }
}

这是界面:

namespace SportsStore.Domain.Abstract
{
    public interface ICategoriesRepository
    {
        IQueryable<Categories> Categories { get; }
        void SaveCategory(Categories category);
        void DeleteCategory(Categories category);
    }
}

这是班级:

namespace SportsStore.Domain.Entities
{
    public class Categories
    {
        [Key]
        public int CategoryID { get; set; }
        public string CategoryName { get; set; }
    }

}

我做错了什么?

2 个答案:

答案 0 :(得分:2)

到目前为止你所做的很好 - 它只是不完整。

你不需要其他人建议的二传手 - 实际上在这种情况下最好不要有一个。

您需要具体实现您的接口ICategoriesRepository,例如:

public class CategoriesRepository : ICategoriesRepository
{
    private readonly ModelContainer db= new ModelContainer();

    public IQueryable<Categories> Categories 
    { 
        get
        {
            return this.db.Categories;
        }
    }

    public void SaveCategory(Categories category)
    {
        // TODO
    }

    public void DeleteCategory(Categories category)
    {
        // TODO
    }
}

然后,您需要在viewmodel中添加一行:

public class CategoryItemsViewModel
{
    public ICategoriesRepository categoriesRepository;

    public IEnumerable<Categories> GetCategories()
    {
        // This is to instantiate your repository.  It may be a better idea to do this
        // when it is declared, above.
        categoriesRepository = new CategoriesRepository();

        var cat = categoriesRepository.Categories;

        return cat;

    }
}

答案 1 :(得分:1)

您没有将null的任何内容设置为Categories对象中的ICategoriesRepository属性,并且您不能使用给定的接口。你有一个带有自动吸气器的房产,没有安装者。这意味着它只能返回null。如果有一个setter(公共或私有),那么你将能够将其设置为其他东西。 (您还需要有一行实际执行此操作的代码。)您还可以使用实际返回除了支持字段之外的其他内容的自定义getter。 (这对于派生数据来说很常见。)