我的博客应用程序中有两个课程:
public class Post
{
public int PostId { get; set; }
public int CategoryId { get; set; }
public string PostImg { get; set; }
public virtual ICollection<Comment> Comments { get; set; }
//some other stuff
}
public class Category
{
public int CategoryId { get; set; }
public string CategoryName { get; set; }
public string Slug { get; set; }
public string Description { get; set; }
}
如您所见,帖子有一个表示其类别的int属性。我希望我的index-method能够获取一个参数,该参数可以根据视图中单击的内容按类别对帖子进行排序。如果category直接在我的postclass中是一个字符串属性,这不会是一个问题。但现在它只是一个int,我没有看到如何实现这一点。
假设我有一个看起来像这样的方法:
public ActionResult Index(string category)
{
var model = new IndexViewModel
{
Posts = _repository.Posts.Where(o=>o.CategoryId == category).ToList(),
};
return View(model);
}
当然上面不起作用cos categoryId
是一个int而category
是一个字符串。我希望有人能看到我在这里尝试做什么。
谢谢!
答案 0 :(得分:1)
您可以将参数声明为int:
public ActionResult Index(int category)
{
var model = new IndexViewModel
{
Posts = _repository.Posts.Where(o=>o.CategoryId == category).ToList(),
};
return View(model);
}
或者将其解析为变量:
public ActionResult Index(string category)
{
var categoryId = Int32.Parse(category);
var model = new IndexViewModel
{
Posts = _repository.Posts.Where(o=>o.CategoryId == categoryId).ToList(),
};
return View(model);
}
答案 1 :(得分:1)
您需要使用join语句来获取具有给定名称的类别的帖子。我假设参数中的类别是类别名称。否则Giannis给出的答案是正确的。
public ActionResult Index(string category)
{
var model = new IndexViewModel
{
Posts =_repository.Posts.Join(_repository.Categories.Where(c => c.CategoryName == category), p => p.CategoryId, c => c.CategoryId, (p, c) => p).ToList(),
};
return View(model);
}