我有这个案子:
我从这样的列表中创建一个数组:
String[] parameters = stringParametersToSearch.Split(' ');
参数的数量可以在1到n之间变化,我必须在描述字段中搜索包含所有参数
的对象List<LookUpObject> result =
components.Where(o => o.LongDescription.Contains(parameters[0])).ToList<LookUpObject>();
如果参数为1,那么它们是否有两个或更多?
目前为了解决这种情况,我使用一个IF来构建最多五个参数(最多真实案例)的LINQ表达式。
我可以使用LINQ动态解决这种情况吗?
答案 0 :(得分:10)
您要么使用Any
或All
,具体取决于您是要查找所有参数匹配的对象还是其中任何参数。如下所示:
var result = components
.Where(o => parameters.Any(p => o.LongDescription.Contains(p)))
.ToList();
...但如果需要,请将Any
更改为All
。
总是值得尝试用单词描述查询,然后查看您使用的单词。如果您使用单词“any”或“all”,那么您可能希望在查询中使用它。
话虽如此,鉴于您发布的示例(在现已删除的评论中),您还不清楚是否真的想要使用字符串操作。如果长描述是:
KW=50 CO2=69 KG=100
...然后你最终会在“G = 100”或“KG = 1”上进行匹配,我怀疑这两者都不是你真正想要的。您应该将长描述和参数解析为名称/值对,并在查询中查找那些。