我仍在使用来自数据库(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;
}`
答案 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()
。