c#过滤器搜索,多个搜索框
本文关键字:搜索 过滤器 | 更新日期: 2023-09-27 18:18:33
List<LICENSE> licenseList = context.LICENSE.Where(l => ( string.IsNullOrEmpty(licenseID) || l.LICENSE_ID.Contains(licenseID) ) && ( string.IsNullOrEmpty(hardwareID) || l.HARDWARE_ID.Contains(hardwareID) ) ).Take(10).ToList();
这是我目前处理多个搜索框的解决方案。它是一个搜索功能,可以将2个或更多的文本字段组合到一个搜索中。所以我的问题是:这是一个好方法来过滤掉传递的搜索字符串。当查询是小数而不是字符串时,我如何使用它?由于
您的示例非常好。
关于它是小数:
-
如果它是一个可空的类型,那么你首先必须检查它是否有一个值,如果有,它不是十进制的默认值,它是0。
-
如果它不是一个可空的类型,那么你所要做的就是检查它是/不是==到0,这是默认类型。我总是检查它是否大于零,基于许可证不会是负的假设。
我假设它不是一个可空的类型,因为它似乎是一个内联声明的var,所以这里有一个格式化的十进制示例:
List<LICENSE> licenseList =
context.LICENSE.Where(l => licenseID == 0 || l.LICENSE_ID.Contains(licenseID))
.Where(l => hardwareID == 0 || l.HARDWARE_ID.Contains(hardwareID))
.Take(10)
.ToList();
有趣的是,如果你不知道字段的默认类型,你可以使用
licenseID == default(decimal)
您可以尝试在搜索框中使用foreach循环,修改linq。
object[] a = {"seach", 5}; // "Data"
string[] Search = { "asdf", "asdf" }; //Search boxes
var s = a.Where(l => ((string)l).Contains(Search[0])); //first search
for (int i = 1; i < Search.Length; i++) //consecutive searches
s = s.Where(l => ((string)l).Contains(Search[i]));
看起来不错。你也可以像这样使用循环:
var query = context.LICENSE;
foreach(var item in stringVariables) {
query = query.Where(x => string.IsNullOrEmpty(item) || l.LICENSE_ID.Contains(item));
}
和stringVariables可以预先定义或使用某种算法来决定是否为搜索字段。
关于数字(假设您的列具有类型int
,如果它是string
,则不必更改任何内容),您可能有一个可空的数字,这取决于您的搜索表单。因此,你还需要检查它是否为空以及它是否是正确的数字。您可能想要将其转换为字符串以也具有Contains
函数。但这完全取决于你的应用。