我解析使用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
办呢?
你可以做一个直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)