MVC / EF Code First ICollection对象

时间:2015-01-28 13:08:03

标签: asp.net-mvc linq entity-framework

我正在使用MVC5 Code First并且有几个看起来像的类;

public class Asset
{
    public int Id { get; set; }
    public string FileName { get; set; }
    public virtual ICollection<Category> Categories { get; set; }
}

public class Category
{
    public int CategoryId { get; set; }
    public int AssetId { get; set; }
    public string CategoryName { get; set; }
    public string Description { get; set; }
}

我想返回一个列出所有具有特定类别的资产的视图。

我希望得到一些东西
    public ActionResult ListByCategory(string categoryName)
    {
        var model =
            from r in _db.Assets
            .Where(r => r.Categories.CategoryName == categoryName)
            select r;

        return View(model);
    }

我知道我的种子方法中有一些资产存在类别。但是编译器说&#34; System.Collection.Generic.ICollection不包含CategoryName的定义,也没有找到扩展方法,我错过了引用吗?&#34;这是我的.Where行。

我不完全理解它试图告诉我的内容。我确实参考了我的模型,因为我可以在控制器的其他地方引用它们。我知道单个资产可能在几个类别中,因此我在类级别创建了ICollection。

这是我的上下文类;

public class AssetsDb : DbContext
{
    public AssetsDb() : base("DefaultConnection")
    {

    }
    public DbSet<Asset> Assets { get; set; }
    public DbSet<Category> Categories { get; set; }
}

有人可以帮助我了解如何获取基础数据吗?我正在尝试学习EF / MVC,所以感谢任何帮助。 感谢。

1 个答案:

答案 0 :(得分:2)

您无法从类别集合中获取CategoryName,您需要检查集合中每个类别的名称。

请尝试使用此查询:

var model =
        from r in _db.Assets
        .Where(r => r.Categories.Any(c => c.CategoryName == categoryName))
        select r;