0

我的 where-query 有我的小问题。我有一个包含不同日期的文本文件。我已经设法阅读了所有这些,我想使用不同月份的日期。文本文件中日期的输入格式如下所示:20130101。

我的问题:有什么方法可以查看索引 4 和 5 并说 1 月份的索引 4 应该是 0 而索引 5 应该是 1?或者我可以用另一种方式解决这个问题吗?

我暂时已经这样解决了,但是我的程序在 2014 年将无法运行..

if(ComboBoxMonth.Text == "January")
{
var query = from p in list
where p.Datum.StartsWith("201301")
select p;           
}
4

4 回答 4

1

如有疑问,我会恢复为点表示法,因为出于某种原因我可以更好地可视化它:)

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);
于 2013-10-30T19:53:37.547 回答
0
where DateTime.ParseExact(p.Datum, "yyyyMMdd", CultureInfo.InvariantCulture).Month == 1
于 2013-10-30T20:29:11.137 回答
0

您可以将输入转换为 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 }          
}
于 2013-10-30T19:58:50.110 回答
-1

如果您的问题是您如何从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;
于 2013-10-30T20:00:09.347 回答