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

C# c过滤器搜索,多个搜索框,c#,asp.net,C#,Asp.net,这是我目前处理多个搜索框的解决方案。它是一个搜索功能,将两个或多个文本字段组合到一个搜索中。所以我的问题是:这是过滤传递的搜索字符串的好方法吗。当查询是小数而不是字符串时,如何使用它?谢谢您可以尝试在搜索框上使用foreach循环,修改linq,以实现其中任何一种 List<LICENSE> licenseList = context.LICENSE.Where(l => ( string.IsNullOrEmpty(licenseID) || l.LICENSE_ID.Con

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

您可以尝试在搜索框上使用foreach循环,修改linq,以实现其中任何一种

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

是的,看起来不错。您也可以使用如下循环:

        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]));
stringVariables可以是预定义的,也可以是某种算法来决定它是否是搜索字段


关于数字,假设列的类型为int,那么如果它是一个字符串,则不必更改任何内容,根据搜索表单,可能有一个可为空的数字。因此,您还必须检查它是否为空,以及它是否是正确的数字。您可能希望将其强制转换为字符串以同时具有Contains函数。但这一切都取决于您的应用程序。

您的示例非常好

关于小数:

如果它是一个可为null的类型,那么您首先必须检查它是否有值,如果有值,则它不是十进制的默认值,即0

如果它不是一个可为null的类型,那么您所要做的就是检查它是否为默认类型。基于许可证不会为负值的假设,我总是检查以确保它大于零

我将假设它不是一个可为null的类型,因为它似乎是一个内联声明的var,所以下面是一个十进制的格式化示例:

var query = context.LICENSE;
foreach(var item in stringVariables) {
    query = query.Where(x => string.IsNullOrEmpty(item) || l.LICENSE_ID.Contains(item));
}

@jnr:你说我不必按弦投是什么意思?我的int类型没有包含函数。如何使用ints实现Contains功能?您需要对System.Linq的引用;Compare使用System.Collections.Generic.IEqualityComparer,这意味着无论它将比较什么类型的列表,只要您提供与列表相同的类型,而不仅仅是字符串。我想您所有的答案都是正确的,但我接受这一点。感谢你们的帮助,尽管我自己几乎解决了这个问题:
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)