我在where查询中遇到了一个小问题。我有一个包含不同日期的文本文件。我已经设法阅读了所有这些,我想使用不同月份的日期。文本文件中日期的输入格式如下所示:20130101。
我的问题:有没有办法查看索引 4 和 5,并说一月份索引 4 应该是 0,索引 5 应该是 1?或者我可以用另一种方式解决这个问题?
我目前已经这样解决了它,但是我的程序在2014年将无法运行。
if(ComboBoxMonth.Text == "January")
{
var query = from p in list
where p.Datum.StartsWith("201301")
select p;
}
如有疑问,我会恢复到点符号,因为出于某种原因,我可以更好地可视化它:)
list.Select(p=>p.Datum.Length >= 6 && p.Datum.SubString(4,2) == "01");
但是,您可以使用以下方法执行相同的操作:
where p.Datum.Length >= 6 && p.Datum.SubString(4,2) == "01"
但是,重新阅读您的问题,也许您真正想要的只是转换为日期时间并检查日期的任何部分?
list.Select(p=>DateTime.ParseExact(p.Datum, "yyyyMMdd", null).Month == 1);
您可以将输入转换为 DateTime,并使用以下代码将其过滤掉:
if(ComboBoxMonth.Text == "January")
{
var query = from p in list
select new DateTime(p.Substring(0, 4), p.Substring(4, 2), p.Substring(6, 2)) into y
where y.Month == 1
select new { Input = p, DateValue = y }
}
where DateTime.ParseExact(p.Datum, "yyyyMMdd", CultureInfo.InvariantCulture).Month == 1
如果你的问题是如何从一月到01,你可以用System.Globalization.DateTimeFormatInfo.MonthNames
来查找月份索引
// +1 to make it 1 based
string twoDigitMonth = (Array.IndexOf(System.Globalization.DateTimeFormatInfo.MonthNames, ComboBoxMonth.Text)) + 1).ToString("D2");
var query = from p in list
where p.Datum.Substring(4,2)==twoDigitMonth
select p;