LINQ字符串StartsWith一些列表值

问题描述 投票:3回答:2

我解析使用LINQ一个XDocument。我想检查XElements之一,与主要“BusinessStructure”在我List<string> filters字符串中的一个开始。换句话说,假设我有:

x.Element("BusinessStructure").Value = "testing123"

var filters = new List<string> {"test", "hello"}

使用LINQ,我怎么那么像做...

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

而是获得过滤器列表的第一个指标,我想“循环”,通过列表中的所有值,并检查的XElement价值与它开始。这可能使用LINQ或我使用foreach办呢?

c# xml linq
2个回答
8
投票

你可以做一个直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)

如果性能是一个考虑因素,试图测量两个。


-1
投票

我会做这样的事情;

filters.Any(f => x.Element("BusinessStructure").Value.IndexOf(f)==0)
© www.soinside.com 2019 - 2024. All rights reserved.