Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/323.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用于列表中具有某些值的字符串STARTS<;字符串>;_C#_Xml_Linq - Fatal编程技术网

C# LINQ用于列表中具有某些值的字符串STARTS<;字符串>;

C# LINQ用于列表中具有某些值的字符串STARTS<;字符串>;,c#,xml,linq,C#,Xml,Linq,我正在使用LINQ解析XDocument。我想检查带有键“BusinessStructure”的一个元素是否以我的列表过滤器中的一个字符串开头。换句话说,假设我有: x.Element(“业务结构”).Value=“testing123” 及 var filters=新列表{“test”,“hello”} 使用LINQ,我该如何做像 ... where x.Element("BusinessStructure").Value.StartsWith(filters[0]) select new..

我正在使用LINQ解析XDocument。我想检查带有键“BusinessStructure”的一个元素是否以我的
列表过滤器中的一个字符串开头。换句话说,假设我有:

x.Element(“业务结构”).Value=“testing123”

var filters=新列表{“test”,“hello”}

使用LINQ,我该如何做像

...
where x.Element("BusinessStructure").Value.StartsWith(filters[0])
select new...

但是,我不想获取过滤器列表的第一个索引,而是想“循环”列表中的所有值,并检查XElement值是否以它开头。这是否可以使用LINQ实现,还是必须使用
foreach
实现?

您可以直接使用LINQ解决方案,稍微修改查询:

let bs = x.Element("BusinessStructure")
where bs != null && filters.Any(f => bs.Value.StartsWith(f))
或者,您可以使用过滤器构建正则表达式:

var prefixRegex = new Regex("\\A" + string.Join("|",filters.Select(f=>Regex.Escape(f)));
...
let bs = x.Element("BusinessStructure")
where bs != null && prefixRegex.IsMatch(bs.Value)

如果绩效是一个考虑因素,那么尝试并衡量两者。

我会这样做

filters.Any(f => x.Element("BusinessStructure").Value.IndexOf(f)==0)

请注意,如果该元素不存在,您将得到一个NRE。最好显式转换为字符串并检查-
where filters.Any(f=>((string)x.Element(“BusinessStructure”)).StartsWith(f))@Tim谢谢你提醒我NRE的可能性。我宁愿使用显式的空检查来处理这个问题,以使意图更加清晰。编辑。这甚至不会编译。如果更正了,它与当前接受的答案基本相同(没有错误检查)。你在说什么?我正在使用这段代码,它编译得很好。只需要把它放在循环中。我只是把代码放在这里,用来完成检查任务。你有一个观点,那就是它有点像公认的答案,但它不一样。您应该在这里找到更好的方法
CS0119'XContainer.Element(XName)'是一种方法,在给定上下文中无效
。我正在做我应该做的事情。社区的工作是提高所有问题和答案的质量。天哪,这太有趣了。我编辑了代码,这样就可以编译了。开心点!