Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/316.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# “动态Linq”;其中参数";_C#_Linq_Linq To Objects - Fatal编程技术网

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
对于您的特定上下文可能已经足够了,但至少在总体上这是个坏主意。