如何在ASP.NET MVC中实现Like运算符?

时间:2012-11-06 02:56:53

标签: sql asp.net-mvc json

我仍在使用来自数据库(SQL)的数据处理我的自动完成文本框,我想我没有得到任何文本框的结果,因为我的select语句中出现了错误或缺失,这是我当前代码的样子。这是视图的json代码:

       $(function () {
        $("#autoCompleteText").autocomplete({
            source: function (request, response) {
                var autoSearch = { searchText: $("#autoCompleteText").val() };
                $.ajax({
                    type: "POST",
                    traditional: true,
                    url: "/Products/jsonAutoComplete",
                    data: autoSearch,
                    dataType: "json",
                    success: function (data) {
                        response(data.d);
                    },
                    error: function (result) {
                        alert("Error");
                    }
                });
            },
            delay: 0,
            minLength: 2
        });
    });

我非常确定它是有效的,因为无论何时我在我的控制器上运行断点,jsonAutoComplete方法都会运行,但我希望在autcomplete上显示的productName始终为null。这是我的代码与select语句:

    public JsonResult jsonAutoComplete(string searchText)
    {
        JsonResult data= new JsonResult();
        IList<Products> products = null; products = (from c in db.Products where c.CompanyId.Equals(companyId) && (c.ProductName.Contains("'%" + searchText + "%'")) select c).ToList();
Products prod = new Products();
        int productId = prod.Id;
        string productName = prod.ProductName;
        data.Data = new { productId = productId, productName = productName };
        return data;
    }`

2 个答案:

答案 0 :(得分:5)

你不能在Linq中使用SQL运算符或SQL语法,因为这是重点:Linq旨在抽象出SQL,因为%是特定于T-SQL的通配符语法。

只需拥有此谓词即可:

from c in db.Products
where c.ProductName.Contains( searchText ) 
select c

然而,Linq对于自由文本搜索真的不太好用。为了更好的搜索系统,我使用SQL Server全文索引,然后生成搜索搜索查询中每个术语的动态SQL,而不是简单的字符串搜索(因为它为用户提供了更多的控制和搜索结果,并使它表现得更像谷歌。)

答案 1 :(得分:2)

您也可以使用如下所述

    from c in db.Products
    where SqlMethods.Like(c.ProductName, "%searchtext%")
    select *;

或者您也可以使用.StartsWith().EndsWith().Contains()