0

我仍在使用数据库(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 方法就会运行,但我希望出现在自动完成上的 productName 始终为空。这是我的带有 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;
    }`
4

2 回答 2

5

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

只需使用此谓词即可:

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

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

于 2012-11-06T03:30:34.487 回答
2

您也可以使用如下所述

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

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

于 2012-11-06T05:07:30.667 回答