1、 在业务流程里时常使用到模糊查询,模糊查询是通过在输入的查询条件作为一个子字符串到一个字符串中查询是否查询此子字符串。如现在有一个字符串未“张三和李四”,输入“张三”或者“李四“都可以查询到此字符串。因为“张三”和“李四“都是属于字符串“张三和李四”的子字符串。那么就可以根据这种原理去查询数据是通过筛选数据。
2、 如下图所示,看搜索区域,可以通过仓库编号、仓库名称、联系人、电话来查询数据、而成是可以模糊查询的。在试图我们只需要把搜索条件内容传递到控制器中,在控制器中筛选数据
3、代码如下
//仓库信息查询
public ActionResult WarehouseInformation(string MultipleParts, LayuiTablePage layuiTablePage)
{
//查询出所有的仓库信息
List<pwWarehouse> strData = (from tb in myModel.PW_Warehouse
join tr in myModel.PW_State on tb.StateID equals tr.StateID
orderby tr.State descending
select new pwWarehouse
{
WarehouseID = tb.WarehouseID,//仓库ID
WarehouseName = tb.WarehouseName,//仓库名称
WarehouseNumber = tb.WarehouseNumber, //仓库编号
WContacts = tb.WContacts == null ? "" : tb.WContacts,//联系人
WContactNumber = tb.WContactNumber == null ? "" : tb.WContactNumber,//联系电话
State = tr.State,//状态
CDefault = tb.CDefault,//默认否
}).ToList();
//判断传递过来的搜索条件内容是否未字符串类型的数据
if (!string.IsNullOrEmpty(MultipleParts))
{
//模糊查询,因为搜索条件有四个,所有在这里有四个筛选,只要有一个条件匹配上就可以--- “字符串.Contains(子串)”:返回一个值,该值指示指定的子串是否出现在此字符串中
strData = strData.Where(m => m.WarehouseName.Contains(MultipleParts) || m.WarehouseNumber.Contains(MultipleParts) || m.WContacts.Contains(MultipleParts) || m.WContactNumber.Contains(MultipleParts)).ToList();
}
var myCount = strData.Count();
List<pwWarehouse> listData = strData
.Skip(layuiTablePage.GetStartIndex())
.Take(layuiTablePage.limit).ToList();
LayuiTableData<pwWarehouse> myData = new LayuiTableData<pwWarehouse>();
myData.count = myCount;
myData.data = listData;
return Json(myData, JsonRequestBehavior.AllowGet);
}
,
3、 注意:当你按照中写法出现如下错误时,是因为你的数据中存在null值,就如我上面的联系人和联系电话来说有时候未录入联系人或者联系人电话,那么就有那么一条或者多条仓库数据的中的联系人和联系电话所对应的字段值为null。在上面说到这个模糊查询是在字符串中判断是否存在传递过来的查询条件的子串,我们要保正两个值都为字符串才能对比匹配,如果数据传过来的是null值,null值是布尔值,那么就存在在null值里匹配是否存在子串,不同数据类型的数据是不能这样子做的,那么就会造成下面的错误。
4、解决方法:WContacts = tb.WContacts == null ? “” : tb.WContacts,//联系人,在获取数据时就去判断一下,返回的值是否是null值。如果是null值就赋值为””,如果不是null就赋值为数据库传递过来的值。