私はASP.NET MVC 3プロジェクトで次のActionResultを取得しました:
public ActionResult Index(string searchWord, GridSortOptions gridSortOptions, int? page)
{
var userListModel = new PagedViewModel<UserModel>
{
ViewData = ViewData,
Query = conn.Query<UserModel>("select Id, Login, Firstname, Lastname from User").AsQueryable(),
GridSortOptions = gridSortOptions,
DefaultSortColumn = "Id",
Page = page,
PageSize = 20
}
.AddFilter("searchWord", searchWord, u => u.Login.Contains(searchWord) || u.Firstname.Contains(searchWord) || u.Lastname.Contains(searchWord))
.Setup();
return View(userListModel);
}
searchWordがnullの場合、すべて正常に動作しますが、searchWordを追加すると、MVCContribグリッドが 'オブジェクト参照がオブジェクトのインスタンスに設定されていません'というエラーが発生します。これはAddFilterメソッドから.Containsを削除すると機能します。
.AddFilter("searchWord", searchWord, u => u.Login == searchWord)
誰でもこれを回避する方法を知っていますか、なぜDapper IQueryableでContainsを使用できないのですか?
ありがとう
編集:
サムの答えに感謝します。
.AddFilter("searchWord", searchWord, u => (!string.IsNullOrEmpty(u.Login) && u.Login.Contains(searchWord))
これは実際にDapperの問題ではありません。
あなたはオブジェクトのコレクションを持っていますが、そのうちのいくつかはnull
プロパティを持っていて、あなたはそれらをヒットしようとしてい.Contains
var users = new UserModel[] { new UserModel(); }
// Login is null
users.AsQueryable().where(u => u.Login.Contains("bob")); // kaboom