Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/entity-framework/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/visual-studio-code/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如果输入日期不为空,则按日期范围搜索整个框架_C#_Entity Framework - Fatal编程技术网

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