我正在研究Pro ASP.NET MVC 3 Framework中的 SportsStore 示例。在第 8 章的开头,我被指示编辑我的 ProductController 类,添加 .Where 行,如下所示:
public ViewResult List(string category, int page = 1)
{
ProductsListViewModel viewModel = new ProductsListViewModel
{
Products = repository.Products
.Where(p => category == null || p.Category == category)
.OrderBy(p => p.ProductID)
.Skip((page - 1) * PageSize)
.Take(PageSize),
PagingInfo = new PagingInfo
{
CurrentPage = page,
ItemsPerPage = PageSize,
TotalItems = repository.Products.Count()
},
CurrentCategory = category
};
return View(viewModel);
}
当我运行代码时,我收到以下错误:
Exception Details: System.Data.SqlServerCe.SqlCeException: The specified argument
value for the function is not valid. [ Argument # = 1,Name of
function(if known) = isnull ]
在以下代码块的 foreach 行上:
@model SportsStore.WebUI.Models.ProductsListViewModel
@{
ViewBag.Title = "Products";
}
@foreach (var p in Model.Products)
{
Html.RenderPartial("ProductSummary", p);
}
<div class="pager">
@Html.PageLinks(Model.PagingInfo, x => Url.Action("List", new {page = x}))
</div>
我已经搜索了很多,并在多个地方发现了很多对这个 StackOverflow 帖子的引用,但是将查询更改为
.Where(p => category == null ? true : p.Category == category)
没有效果。
一些基本信息:
- 这是一个使用 Razer 视图引擎和 C# 的 MVC3 项目。
- 我的 SQL Compact 4.0 数据库中的所有项目都有一个类别。
- 注释掉 category == null 位会使代码运行得很好。
- 我上面给出的第二个版本是他们网站上可下载的源代码。
它确实可以在没有空值检查的情况下工作,但我担心如果我继续前进,我以后可能会遇到问题。有人对我如何解决它有任何想法吗?