筛选位置查询

本文关键字:查询 位置 筛选 | 更新日期: 2023-09-27 18:37:28

我在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;