从外键获取字符串值

时间:2014-09-04 08:45:23

标签: sql asp.net-mvc

我的博客应用程序中有两个课程:

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是一个字符串。我希望有人能看到我在这里尝试做什么。 谢谢!

2 个答案:

答案 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);
}