C# DbFunctions.TruncateTime()仍在生成;键入成员';日期';“不支持”;错误
我在下面的LINQ查询中遇到了麻烦。我对这个错误做了很多研究,发现的几乎所有东西都引用了DbFunctions.TruncateTime(),但是这似乎对我仍然不起作用。我希望有人能看看这个,让我知道我哪里做错了。我所要做的只是比较datetime的日期部分,但我继续得到一个异常:指定的类型成员“date”在LINQ to实体中不受支持。仅支持初始值设定项、实体成员和实体导航属性。C# DbFunctions.TruncateTime()仍在生成;键入成员';日期';“不支持”;错误,c#,linq,entity-framework-6,C#,Linq,Entity Framework 6,我在下面的LINQ查询中遇到了麻烦。我对这个错误做了很多研究,发现的几乎所有东西都引用了DbFunctions.TruncateTime(),但是这似乎对我仍然不起作用。我希望有人能看看这个,让我知道我哪里做错了。我所要做的只是比较datetime的日期部分,但我继续得到一个异常:指定的类型成员“date”在LINQ to实体中不受支持。仅支持初始值设定项、实体成员和实体导航属性。 if (!db.MaintenanceWindows.Any(x => x.Id == Id &
if (!db.MaintenanceWindows.Any(x => x.Id == Id &
DbFunctions.TruncateTime(x.BlockedDay) == DateTime.UtcNow.Date &
x.IsDeleted.Value == false))
{
...
}
TIA它并不是在抱怨
DbFunctions.TruncateTime
。它在抱怨DateTime.UtcNow.Date
建议A:
(不推荐)
建议B:
var utcNow = DateTime.UtcNow.Date;
if (!db.MaintenanceWindows.Any(x => x.Id == Id &&
DbFunctions.TruncateTime(x.BlockedDay) == utcNow &&
x.IsDeleted.Value == false))
此外,您还需要表达式中的“逻辑AND”(
&&&
)。它并不是在抱怨DbFunctions.TruncateTime
。它在抱怨DateTime.UtcNow.Date
建议A:
(不推荐)
建议B:
var utcNow = DateTime.UtcNow.Date;
if (!db.MaintenanceWindows.Any(x => x.Id == Id &&
DbFunctions.TruncateTime(x.BlockedDay) == utcNow &&
x.IsDeleted.Value == false))
此外,您还需要表达式中的“逻辑AND”(
&&
)。这里的Date
属性如何DateTime.UtcNow.Date
,它使用的是Date
属性-这正是异常消息告诉您的:)为什么不将其放入查询外部的变量中。因为它无法转换为sql查询,所以它不是受支持的规范函数。对于您希望支持的每个呼叫,必须编写代码以确保其能够被翻译。再次感谢您的快速响应。你们太棒了!嗯,考虑到TruncateTime
是DateTime.Date
属性的db等价物,我认为EF没有特别的理由不支持它。他们只是没有:)这里的Date
property如何DateTime.UtcNow.Date
我的意思是,它使用的是Date
property-这正是异常消息告诉您的:)为什么不把它放在查询之外的变量中。因为它不能转换为sql查询,所以它不是受支持的规范函数。对于您希望支持的每个呼叫,必须编写代码以确保其能够被翻译。再次感谢您的快速响应。你们太棒了!嗯,考虑到TruncateTime
是DateTime.Date
属性的db等价物,我认为EF没有特别的理由不支持它。他们只是没有:)我不推荐建议A。这样,SQL server必须为每个记录截断声明变量的时间。拥有快速SQL查询的最佳方法是使所有可能的参数都保持静态。建议A最接近其原始代码,B是优化版本。我应该说清楚。我不推荐建议A。这样SQL server必须为每个记录截断声明变量的时间。拥有快速SQL查询的最佳方法是使所有可能的参数都保持静态。建议A最接近其原始代码,B是优化版本。我应该说清楚的。