我正在使用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,所以感谢任何帮助。 感谢。
答案 0 :(得分:2)
您无法从类别集合中获取CategoryName,您需要检查集合中每个类别的名称。
请尝试使用此查询:
var model =
from r in _db.Assets
.Where(r => r.Categories.Any(c => c.CategoryName == categoryName))
select r;