我有一个显示对象列表的视图。
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表达式中包含条件?如果可以检查是否分配了值,那将对我有所帮助。
答案 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));