使用查询参数显示不同版本的视图

时间:2016-01-07 12:07:04

标签: c# asp.net-mvc

我有一个显示对象列表的视图。

public partial class Book
{   
    public long Id { get; set; }
    public int TitleId { get; set; }
    public int AuthorId { get; set; }
    public int pages { get; set; }
}

我想用不同的参数呈现视图。我想展示标题为#Be; C#for Begginers"的书籍,另一次我希望与作者#34; M展示书籍。史密斯",另一次有这两个参数等等。

实现这一目标的最佳方法是什么?我想拥有一个带有所有这些参数的控制器方法,并检查它们中的哪一个被设置,但它需要很多ifs,我希望有更好的方法。

这是我从数据库中获取列表的方式:

var list = context.Book.Where(i => i.TitleId == titleid).ToList();

是否可以在此lambda表达式中包含条件?如果可以检查是否分配了值,那将对我有所帮助。

1 个答案:

答案 0 :(得分:1)

嗯,有点听起来你已经知道你需要做什么,但不想做,因为它会需要很多ifs"。我不确定您希望找到的其他方法,但它必须是这样的:

public ActionResult Books(string title, string author)
{
    var books = context.Book.AsQuerable();

    if (!String.IsNullOrWhiteSpace(title))
    {
        books = books.Where(m => m.Title == title);
    }

    if (!String.IsNullOrWhiteSpace(author))
    {
        books = books.Where(m => m.Author == author);
    }

    return View(books);
}

换句话说,您必须确定过滤参数是否已通过(您的if语句),然后相应地有条件地过滤图书集。

修改

好吧,我有点想回来。您不需要技术需要if语句,但代码 更具可读性和显而易见性。如果您不惜一切代价避免if不健康,那么您可以采取以下措施:

var books = context.Book.Where(m => (string.IsNullOrWhiteSpace(title) || m.Title == title) && (string.IsNullOrWhiteSpace(author) || m.Author == author));