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

本文关键字:版本 视图 显示 查询 参数 | 更新日期: 2023-09-27 18:29:16

我有一个视图,它显示了一个对象列表。

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

我想介绍一下不同参数的观点。我想展示标题为"C#for Begginers"的书,另一次我想展示作者为"M.Smith"的书;另一次,我想展示这两个参数的书,等等。

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

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

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

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

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

听起来你已经知道自己需要做什么了,但不想做,因为这"需要很多if"。我不确定你还想找到什么其他方法,但它必须是这样的:

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));