过滤where查询

时间:2013-10-30 19:50:29

标签: c# sql

我的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 个答案:

答案 0 :(得分: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);

答案 1 :(得分: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 }          
}

答案 2 :(得分:0)

where DateTime.ParseExact(p.Datum, "yyyyMMdd", CultureInfo.InvariantCulture).Month == 1

答案 3 :(得分:-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;