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

本文关键字:LINQ 日期 时间 字符串 | 更新日期: 2023-09-27 18:06:32

我有一个数据库,其中一个字符串列指示日期时间值,格式如下:yyyyMMdd。

例如20160908表示2016年9月8日。

我有两个日期时间选择器筛选dateFrom和dateTo值。我在我的日期选择器文本框中使用以下简单代码获取日期时间值:

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);
}

问题是我不能在过滤器之前列出查询,因为我有很多行,如果我使用这个查询,我不能做一个int。解析LINQ语句

我怎么能写一个LINQ语句,选择行在我的DB与datetime之间从和到,如果在列中的值是一个字符串?现在我的查询工作得很好,但我需要一个where子句来解决这个问题。

Thanks to all

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

如果日期具有相同的格式,则不需要将其强制转换为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, string)如下所述https://social.msdn.microsoft.com/forums/en us/98180ae0 - 4 - ccd - 4 - ecd - 89 d5 - 576 a04169219/linq - -实体与字符串comparison?forum=adodotnetentityframework

你不需要放int.Parse,你可以做一个直接的字符串比较它会工作的很好。也不需要将dataDaSel转换为整数。

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

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

只要你保持格式为yyyyMMdd它将工作好,即使是字符串。