使用查询参数显示不同版本的视图
本文关键字:版本 视图 显示 查询 参数 | 更新日期: 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));