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

时间:2011-12-21 08:00:18

标签: c# asp.net

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();

这是我目前处理多个搜索框的解决方案。它是一个搜索功能,将两个或多个文本字段组合到一个搜索中。所以我的问题是:这是一个过滤掉传递的搜索字符串的好方法。当查询是小数而不是字符串时,我如何使用它?感谢

3 个答案:

答案 0 :(得分:0)

您可以尝试在搜索框中使用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]));

答案 1 :(得分:0)

是的,看起来不错。你也可以使用这样的循环:

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函数。但这一切都取决于你的申请。

答案 2 :(得分:0)

你的榜样非常好。

关于它是小数:

  1. 如果它是可以为空的类型,那么首先必须检查它是否有值,如果它有,则它不是小数的默认值,即0。

  2. 如果它不是可空类型,那么您所要做的就是检查它是否是= = 0到0是默认类型。我总是只是检查以确保它大于零,基于许可证不会为负数的假设。

  3. 我将假设它不是可空类型,因为它似乎是内联声明的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)