Pro ASP.NET MVC 3 Frameworkの SportsStore の例に取り組んでいます。第 8 章の冒頭で、次のように .Where 行を追加して、ProductController クラスを編集するように指示されました。
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 データベースのすべてのアイテムにはカテゴリがあります。
- カテゴリ == null ビットをコメント アウトすると、コードが正常に実行されます。
- 上記の 2 番目のバージョンは、サイトからダウンロード可能なソース コードに含まれるものです。
nullチェックなしで動作しますが、先に進むと後で問題が発生するのではないかと心配しています。どうすれば修正できるかについて誰かアイデアがありますか?