Sql 如何在ASP.NET MVC中实现Like操作符?
我仍然在使用数据库中的数据(SQL)处理我的自动完成文本框,我想我没有得到任何文本框的结果,因为我的select语句中有错误或缺失。下面是我当前代码的外观。这是我的视图json代码: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
$(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请求。它是用于实体框架的