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();
这是我目前处理多个搜索框的解决方案。它是一个搜索功能,将两个或多个文本字段组合到一个搜索中。所以我的问题是:这是一个过滤掉传递的搜索字符串的好方法。当查询是小数而不是字符串时,我如何使用它?感谢
答案 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)
你的榜样非常好。
关于它是小数:
如果它是可以为空的类型,那么首先必须检查它是否有值,如果它有,则它不是小数的默认值,即0。
如果它不是可空类型,那么您所要做的就是检查它是否是= = 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)