C# 如果输入日期不为空,则按日期范围搜索整个框架
我想根据日期范围搜索数据,为此我想检查输入的“开始日期”和“结束日期”是否输入,而不是“检查日期范围”,否则将获取所有记录。 下面是我的问题。。请帮我做这件事C# 如果输入日期不为空,则按日期范围搜索整个框架,c#,entity-framework,C#,Entity Framework,我想根据日期范围搜索数据,为此我想检查输入的“开始日期”和“结束日期”是否输入,而不是“检查日期范围”,否则将获取所有记录。 下面是我的问题。。请帮我做这件事 from a in context.ABC join b in context.XYZ on a.ABCID equals b.Id where (txtFromDate.Text =="" ? b.UploadDate.ToString().Contains(txtFromDate.Text) : S
from a in context.ABC
join b in context.XYZ on a.ABCID equals b.Id
where (txtFromDate.Text =="" ? b.UploadDate.ToString().Contains(txtFromDate.Text) :
System.Data.Entity.DbFunctions.TruncateTime(b.UploadDate) >= System.Data.Entity.DbFunctions.TruncateTime(DateTime.Parse( txtFromDate.Text, new CultureInfo("en-GB"))) &&
txtToDate.Text==""?b.UploadDate.ToString().Contains(txtToDate.Text): System.Data.Entity.DbFunctions.TruncateTime(b.UploadDate) >= System.Data.Entity.DbFunctions.TruncateTime(DateTime.Parse(txtToDate.Text, new CultureInfo("en-GB"))))
group new { a, b } by System.Data.Entity.DbFunctions.TruncateTime(b.UploadDate) into c
select new
{
UploadDate = System.Data.Entity.DbFunctions.TruncateTime(c.FirstOrDefault().b.UploadDate),
XYZ = c.Count(),
Lines = c.Sum(x => x.a.number)
}
步骤1:在进入LINQ查询之前,为参数创建新变量。在查询过程中清理参数是一种不好的做法。正如你所看到的,这使它非常混乱。我建议使用“Date”类型,如果该值为null,则实际将其作为过去/未来的日期。这样可以节省以后的额外工作量。。。e、 g
var dteParam1 = string.IsNullOrEmpty(txtFromDate.Text) ? new Date(1901, 1, 1) : Date.Parse(txtFromDate.Text);
步骤2:创建一个日期扩展方法,该方法将检查一个日期是否在两个日期之间。然后你可以在where子句中使用它,例如
b.UploadDate.IsBetween(dteParam1, dteParam2)
你必须在互联网的其他地方找到一个例子
步骤3:在LINQ查询中,可以有如下where子句:
where (b.UploadDate == null || b.UploadDate.IsBetween(dteParam1, dteParam2))
其工作原理如下:如果From date为null,To date为null,则始终返回所有内容。如果From为null,To不为null,或者visa为null,则它将过滤到该范围内。如果数据库值为null,则无论您将什么作为筛选器,它都将始终返回该项。您的代码有什么问题?我们不是自由劳动力,我们也都有自己的工作。。。“你能帮我写这封信吗”在这里对堆栈溢出不起作用。如果我在搜索条件中输入from date和to date,则我需要该日期范围内的数据,如果我不输入from和to date,则应加载所有数据。。我想在查询中检查文本框是否有from和to date或null