Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/319.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# 正确比较LINQ中没有时间的DatetimeOffset与实体_C#_Sql_Entity Framework_Linq - Fatal编程技术网

C# 正确比较LINQ中没有时间的DatetimeOffset与实体

C# 正确比较LINQ中没有时间的DatetimeOffset与实体,c#,sql,entity-framework,linq,C#,Sql,Entity Framework,Linq,我一直在测试几种方法来比较LINQ中的两个DateTimeOffset对象与实体,但我不确定哪一种方法是最有效的,也是最正确的方法 我尝试了以下方法: SomeTable.Where(a => DbFunctions.TruncateTime(a.StartUtc) <= intendedDate && DbFunctions.TruncateTime(a.EndUtc) >= intendedDate); 但是这个查询需要时间,我不能这样做 我不是专家,但对

我一直在测试几种方法来比较LINQ中的两个
DateTimeOffset
对象与实体,但我不确定哪一种方法是最有效的,也是最正确的方法

我尝试了以下方法:

SomeTable.Where(a => DbFunctions.TruncateTime(a.StartUtc) <= intendedDate && DbFunctions.TruncateTime(a.EndUtc) >= intendedDate);
但是这个查询需要时间,我不能这样做

我不是专家,但对于这样一个简单的需求,第一个查询似乎非常长且复杂。在这种情况下,我应该使用原始SQL而不是带有EF的LINQ吗?我无法决定哪种方法最有效。 我觉得
CAST('2016-11-02 00:00:00 AM-02:00'作为日期)
比EF生成的查询简单得多,因此性能更高


这里最好的做法是什么?

在时间限制方面如何处理

var cmpStartDate = intendedDate.AddDays(1);

var ans = SomeTable.Where(a => a.StartUtc < cmpStartDate && a.EndUtc > intendedDate.Subtract(TimeSpan.FromTicks(1)));
var cmpStartDate=intendedDate.AddDays(1);
var ans=SomeTable.Where(a=>a.StartUtcintendedDate.Subtract(TimeSpan.FromTicks(1));

使用“日期”属性,该属性将时间截断为午夜,然后获取日期之间的差值。DateTime以双精度形式存储在计算机中,整数部分为自1900年1月1日起的天数,分数为当前时间/24(即3.5小时/24小时)。L2E不支持@jdweng
Date
属性
((DATEDIFF (day, [Extent1].[StartUtc], '2016-11-01 00:00:00 -02:00')) >= 0) AND ((DATEDIFF (day, '2016-11-01 00:00:00 -02:00', [Extent1].[EndUtc])) >= 0)
var cmpStartDate = intendedDate.AddDays(1);

var ans = SomeTable.Where(a => a.StartUtc < cmpStartDate && a.EndUtc > intendedDate.Subtract(TimeSpan.FromTicks(1)));