Linq with dynamics" where parameter"

时间:2014-12-23 08:29:38

标签: c# linq linq-to-objects

我有这个案子:

我从这样的列表中创建一个数组:

String[] parameters = stringParametersToSearch.Split(' ');

参数的数量可以在1到n之间变化,我必须在描述字段中搜索包含所有参数

的对象
List<LookUpObject> result = 
        components.Where(o => o.LongDescription.Contains(parameters[0])).ToList<LookUpObject>();

如果参数为1,那么它们是否有两个或更多?

目前为了解决这种情况,我使用一个IF来构建最多五个参数(最多真实案例)的LINQ表达式。

我可以使用LINQ动态解决这种情况吗?

1 个答案:

答案 0 :(得分:10)

您要么使用AnyAll,具体取决于您是要查找所有参数匹配的对象还是其中任何参数。如下所示:

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”上进行匹配,我怀疑这两者都不是你真正想要的。您应该将长描述和参数解析为名称/值对,并在查询中查找那些