Sql 如何在ASP.NET MVC中实现Like操作符?

Sql 如何在ASP.NET MVC中实现Like操作符?,sql,asp.net-mvc,json,Sql,Asp.net Mvc,Json,我仍然在使用数据库中的数据(SQL)处理我的自动完成文本框,我想我没有得到任何文本框的结果,因为我的select语句中有错误或缺失。下面是我当前代码的外观。这是我的视图json代码: $(function () { $("#autoCompleteText").autocomplete({ source: function (request, response) { var autoSearch = { sea

我仍然在使用数据库中的数据(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总是空的。以下是我的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;
    }`
公共JsonResult jsonAutoComplete(字符串搜索文本) { JsonResult数据=新的JsonResult(); IList products=null;products=(从db.products中的c开始,其中c.CompanyId.Equals(CompanyId)和&(c.ProductName.Contains(“%”+searchText+“%”))选择c); 产品生产=新产品(); int productId=产品Id; 字符串productName=prod.productName; data.data=new{productId=productId,productName=productName}; 返回数据; }`
您不能在Linq中使用SQL运算符或SQL语法,因为这就是关键:Linq旨在抽象SQL,因为
%
是特定于t-SQL的通配符语法

只需使用此谓词即可:

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

然而,Linq在自由文本搜索中的效果并不好。为了获得更好的搜索系统,我会使用SQL Server全文索引,然后生成动态SQL来搜索搜索查询中的每个词,而不是简单的字符串搜索(因为它给了用户更多的控制和搜索结果,使其行为更像谷歌)。

您也可以使用下面提到的方法

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

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

请停止将“ASP.NET MVC”简单地称为“MVC”。一个是框架,另一个是独立于语言的设计模式。这就像给IE打电话——“互联网”对不起,我不知道。从现在起,我将开始使用ASP.NETMVC。谢谢你提供的信息。例如,如果我在文本框中输入“ch”,自动完成功能会显示带有ch的产品,比如手表、椅子?嗯,大概是:)你是说你还没有测试过你的代码吗?哦,我会试试看。谢谢实际上,我以前也尝试过这段代码,但它对我不起作用,并且返回了一个空值,所以我认为我需要指出字符可以位于单词的任何位置,这样它就会出现,因此在searchText之前和之后使用了%before和aftersearchText。我以前也遇到过同样的问题。Linq to SQL甚至实体框架都不支持MSSQL全文搜索开箱即用!本文中的第二个答案有一个很好的示例,说明了如何执行任何Linq机制都没有涉及的特殊SQL请求。它是用于实体框架的