C# “动态Linq”;其中参数";
我有这个案子: 我从如下列表中创建一个数组:C# “动态Linq”;其中参数";,c#,linq,linq-to-objects,C#,Linq,Linq To Objects,我有这个案子: 我从如下列表中创建一个数组: String[] parameters = stringParametersToSearch.Split(' '); 参数的数量可以从1到n不等,我必须在描述字段中搜索包含所有出现的参数的对象 List<LookUpObject> result = components.Where(o => o.LongDescription.Contains(parameters[0])).ToList<LookUpOb
String[] parameters = stringParametersToSearch.Split(' ');
参数的数量可以从1到n不等,我必须在描述字段中搜索包含所有出现的参数的对象
List<LookUpObject> result =
components.Where(o => o.LongDescription.Contains(parameters[0])).ToList<LookUpObject>();
列表结果=
其中(o=>o.LongDescription.Contains(参数[0])).ToList();
如果参数为1,则执行此操作,但如果它们有两个或更多
目前为了解决这种情况,我使用了一个IF,其中我为最多五个参数的情况(最多为实际情况)构建LINQ表达式
我可以使用LINQ动态解决这种情况?您可以使用
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”上匹配,我怀疑这两者都不是你真正想要的。您可能应该将长描述和参数解析为名称/值对,并在查询中查找它们。您的意思是描述必须包含任何参数,还是所有参数?添加一个右括号“.Contains(p)))”您的答案就是我需要的。你可以删除“编辑”@daniele3004:不,我肯定会把它留给任何有类似情况的人。使用
Contains
对于您的特定上下文可能已经足够了,但至少在总体上这是个坏主意。