我无法理解为什么以下查询不匹配结果:
我目前正在使用西班牙文化信息,并使用以下字符串:
string input = "newsletter/2015/new-web/newsletter-detalle-marzo/segment-1-3";
我无法使用以下linq查询获取“newsletter-detalle-marzo”:
public static string[] GetSegmentMatchingMonth(this string input, string breakPattern = "-") {
var query = (from p in input.ToLower().Split('/')
where p.Contains(breakPattern) &&
DateTimeFormatInfo.CurrentInfo.MonthNames.
Select(m=>m.ToLower()).Any(m => p.Contains(m.ToLower()))
select p).ToArray();
return query;
}
PD:在我目前的文化中,Monthnames是:(数组的字符串连接)
enero febrero marzo abril mayo junio julio agosto septiembre octubre noviembre diciembre
输出结果更多,没有月份名称:
答案 0 :(得分:0)
我认为你需要改变
DateTimeFormatInfo.CurrentInfo.MonthNames
.Select(m => m.ToLower()).ToArray().Contains(p)
到
DateTimeFormatInfo.CurrentInfo.MonthNames.Any(m => p.EndsWith(m.ToLower()))
如果月份将始终位于字符串该部分的末尾。或者,如果Contains
可以在该部分的任何位置,则可以使用DateTimeFormatInfo.CurrentInfo.MonthNames
。
修改强>
事实证明DateTimeFormatInfo.CurrentInfo.MonthNames
.Where(m=> m.Length > 0)
.Select(m=>m.ToLower())
.Any(m => p.Contains(m))
包含一个空字符串。所以你需要过滤掉它。
{{1}}