字符串值中的C#LINQ日期时间

时间:2016-09-10 14:37:38

标签: c# linq datetime

我有一个带字符串列的数据库,用以下格式表示日期时间值:yyyyMMdd。

例如,值20160908表示2016年9月08日。

我有两个datetimepicker用于过滤dateFrom和dateTo值。我使用这个简单的代码在我的datepicker文本框中获取日期时间值:

DateTime dataFromSel = Convert.ToDateTime(txtDatFrom.Text);
DateTime dataToSel = Convert.ToDateTime(txtDatTo.Text);

我的查询是:

var query = from c in snd.WineOWines.OrderByDescending(x => x.DDT_DATA)
   select new
   {
      c.ID,
      c.VABRMA,
      c.VABNCL,
      c.DDT_DATA,
   };

如果我有日期时间过滤器,请添加以下代码:

if (txtDatDa.Text != "")
{
    string dataDaSel = Convert.ToDateTime(txtDatDa.Text).ToString("yyyyMMdd");
    int dataDa = Convert.ToInt32(dataDaSel);
    query = query.Where(x => int.Parse(x.DDT_DATA) >= dataDa);
}

问题是我无法在过滤器之前列出查询,因为我有很多行,如果我使用这个查询,我就无法在LINQ语句中执行int.parse。 / p>

如果列中的值是字符串,我怎样才能编写一个LINQ语句来选择数据库中的行,日期时间介于from和to之间?现在我的查询工作正常,但我需要一个where子句来解决这个问题

感谢所有

2 个答案:

答案 0 :(得分:2)

如果日期具有相同的格式,则无需将它们转换为int。 你应该能够比较蜇伤并移除演员...

if (!string.IsNullOrEmpty(txtDatDa.Text))
{
    string dataDaSel = Convert.ToDateTime(txtDatDa.Text).ToString("yyyyMMdd");
    var res = query.Where(x => string.Compare(dataDaSel, x.Name) <= 0);
}

Linq to SQL支持string.Compare(string,string),如此处所述 https://social.msdn.microsoft.com/Forums/en-US/98180ae0-4ccd-4ecd-89d5-576a04169219/linq-to-entities-with-string-comparison?forum=adodotnetentityframework

答案 1 :(得分:1)

你不必放int.Parse,你可以做一个直接的字符串比较,它会正常工作。您不必将dataDaSel转换为整数。

if (txtDatDa.Text != "")
{
    string dataDaSel = Convert.ToDateTime(txtDatDa.Text).ToString("yyyyMMdd");
    query = query.Where(x => x.DDT_DATA >= dataDaSel);
}

E.g。

"20120201" >= "20120201"   // true
"20120101" >= "20120201"   // false
"20120301" >= "20120201"   // true

只要您将格式保留为yyyyMMdd,即使使用字符串也可以正常工作。