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个或更多的文本字段组合到一个搜索中。所以我的问题是:这是一个好方法来过滤掉传递的搜索字符串。当查询是小数而不是字符串时,我如何使用它?由于

c#过滤器搜索,多个搜索框

您的示例非常好。

关于它是小数:

  1. 如果它是一个可空的类型,那么你首先必须检查它是否有一个值,如果有,它不是十进制的默认值,它是0。

  2. 如果它不是一个可空的类型,那么你所要做的就是检查它是/不是==到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函数。但这完全取决于你的应用。