这个linq查询有什么问题?

时间:2012-02-08 06:15:10

标签: asp.net-mvc linq entity-framework

我有一个产品表,其标题为字符串。

在我的观点中我有

    @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]   描述:执行当前Web请求期间发生未处理的异常。请查看堆栈跟踪以获取有关错误及其源自代码的位置的更多信息。

     

异常详细信息:System.Data.SqlServerCe.SqlCeException:函数的指定参数值无效。 [参数#= 1,函数名称(如果已知)= isnull]

问题是什么?如果我想向用户显示告诉他们你的搜索的话,我该怎么办? 没有匹配任何产品

1 个答案:

答案 0 :(得分:2)

好吧,您应该使用一些日志记录来查找实际发送到数据库的内容 - 但我个人在查询之前将其拆分:

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

    return View(result);
}

可能 SQL CE支持的SQL方言不支持检查您正在使用的空白 - 这就解决了这个问题。