字符串值中的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
如果日期具有相同的格式,则不需要将其强制转换为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
它将工作好,即使是字符串。