2012-02-08 2 views
0

У меня есть таблица продуктов, которая имеет название как строку.Что не так с этим запросом linq?

внутри моей точки зрения у меня есть

@using (Html.BeginForm("Serach","Store")) 
     { 

      <input type="text" name="q" class="searchbox_textbox" /> 
      <input type="submit" class="searchbox_btn" /> 
      } 

и внутри моего контроллера я есть

 public ActionResult Serach(string q) 
    { 
     var result = storeDB.Products 
        .Where(p => p.Title.Contains(q) || string.IsNullOrEmpty(q)); 


     return View(result); 

    } 

, когда я запустить страницу и введите слово для поиска это дает мне эту ошибку

Указанное значение аргумента для функции недопустимо. [Аргумент # = 1, Имя функции (если известно) = isnull] Описание: Необработанное исключение возникло во время выполнения текущего веб-запроса. Просмотрите трассировку стека для получения дополнительной информации об ошибке и ее возникновении в коде.

Сведения об исключении: System.Data.SqlServerCe.SqlCeException: указанное значение аргумента для функции недопустимо. [Аргумент # = 1, Название функции (если известно) = isnull]

В чем проблема? и что мне делать, если я хочу показать пользователям сообщение, которое сообщит им, что ваш serach не соответствует ни одному продукту.

ответ

2

Ну, вы должны использовать некоторые записи, чтобы узнать, что на самом деле отправляется в базу данных, - но лично я «d расколоть запрос, прежде чем он получает там:

public ActionResult Search(string q) 
{ 
    var result = string.IsNullOrEmpty(q) ? storeDB.Products 
        : storeDB.Products.Where(p => p.Title.Contains(q)); 

    return View(result); 
} 

это возможно, что SQL диалект поддерживается SQL CE не поддерживает проверку пустоты, которые вы использовали - и это обходит эту проблему.

Смежные вопросы