У меня есть следующий ActionResult в проекте ASP.NET MVC 3:
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);
}
- Классы GridSortOptions и PagedViewModel взяты из MVCContrib, так как представление использует Grid из MVCContrib для отображенияdata.
- conn - это стандартный SQLConnection, взаимодействующий с базой данных SQL-сервера.
- conn.Query - это метод расширения SQLConnection, предоставляемый Dapper, который я использую для получения данных.
- Свойство Query, заполняемое в PagedViewModel, имеет тип IQueryable
Если searchWord имеет значение null, все работает нормально, но как только вы добавляете searchWord, сетка MVCContrib падает с 'Objectссылка не установлена на экземпляр ошибки объекта.Это работает, если я удаляю .Contains) из метода AddFilter следующим образом:
.AddFilter("searchWord", searchWord, u => u.Login == searchWord)
Кто-нибудь знает способ обойти это, или почему я не могу использовать Contains с Dapper IQueryable?
Спасибо
Редактировать:
Благодаря ответу Сэма это исправляет это:
.AddFilter("searchWord", searchWord, u => (!string.IsNullOrEmpty(u.Login) && u.Login.Contains(searchWord))