Linq查询不匹配DateTimeFormatInfo月份列表中的结果

时间:2015-03-25 14:08:24

标签: c# .net linq

我无法理解为什么以下查询不匹配结果:

我目前正在使用西班牙文化信息,并使用以下字符串:

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

输出结果更多,没有月份名称:

enter image description here

1 个答案:

答案 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}}