Linq通配符搜索mvc c#
Posted
技术标签:
【中文标题】Linq通配符搜索mvc c#【英文标题】:Linq wild card search mvc c# 【发布时间】:2021-11-25 07:36:08 【问题描述】:我正在尝试在 mvc 应用程序中使用 linq 实现通配符搜索。但它不工作。请查看我的代码,我在这里缺少什么,每次我单击搜索按钮时,它都会返回相同的行数。表示搜索不工作。请帮忙
IEnumerable<ProductList> listProducts = null;
listProducts = IProductRep.GetAllProducts();
if (listProducts != null)
if ((!String.IsNullOrEmpty(strName)) || (!String.IsNullOrEmpty(strCategory))|| (!String.IsNullOrEmpty(strBrand)))
listProducts = listProducts.Where(s => s.pro_name.StartsWith(strName, StringComparison.OrdinalIgnoreCase)
|| s.CategoryName.StartsWith(strCategory,StringComparison.OrdinalIgnoreCase)
|| s.BrandName.StartsWith(strBrand, StringComparison.OrdinalIgnoreCase) );
ViewBag.totalRecords = listProducts.Count();
【问题讨论】:
你确定strName、strCategori和strBrand有价值吗? 我试图只给出一个值,这意味着如果我想按品牌进行搜索,那么我只给出谷仓的价值并将其他参数留空。 为什么将null
分配给listProducts
,然后立即用IProductRep.GetAllProducts()
覆盖它?只需分配即可。
未使用的过滤器变量是null
还是空的?如果null
,EF 5 将忽略该部分测试,如果""
,EF 5 将向SQL 发送为true 的代码。正在生成什么 SQL?
【参考方案1】:
您的问题似乎是并非所有strName, strCategory, strBrand
都有价值。
我假设你没有分配的变量是空字符串,因为如果它们是空值,你会得到ArgumentNullException
on:
s.field.StartsWith(null, StringComparison.OrdinalIgnoreCase)
如果确实没有从 UI 中分配值的变量(或分配它的任何位置)是一个空字符串,那么 s.field.StartsWith(string.Empty, StringComparison.OrdinalIgnoreCase)
将始终为真(因为每个字符串都以空字符串开头) .
这意味着你得到了所有的记录。
您可以像这样将检查添加到 linq:
listProducts = listProducts
.Where(s => !string.IsNullOrEmpty(strName) && s.pro_name.StartsWith(strName, StringComparison.OrdinalIgnoreCase) ||
...
【讨论】:
以上是关于Linq通配符搜索mvc c#的主要内容,如果未能解决你的问题,请参考以下文章
使用 C# 对 StackExchange.Redis 哈希中的字段进行通配符搜索