![](/img/trans.png)
[英]The specified type member 'Ticks' is not supported in LINQ to Entities
[英]'Ticks' is not supported in LINQ to Entities
这是我的代码:
var count = this.Repository.ObjectContext.LogDetail
.Count(p => p.LogId == logId &&System.Data.Objects.EntityFunctions. p.LogDetailTime. == logDetailTime.Ticks && p.OperationId == operationId);
return (count > 0);
我得到这个错误:
LINQ to Entities不支持指定的类型成员“ Ticks”。 仅支持初始化程序,实体成员和实体导航属性。
我该如何解决?
如前所述,您不应将所有记录都提取到内存中,然后再进行过滤。 您可以轻松比较日期值而无需转换为刻度:
var query = this.Repository.ObjectContext.LogDetail
.Where(p => p.LogId == logId
&& p.OperationId == operationId
&& EntityFunctions.DiffSeconds(p.LogDetailTime,
logDetailTime) == 0);
return (query.Any());
请注意,当差异变得大于Int32.MaxValue
时, DiffSeconds
可能导致溢出(错误: datediff函数导致溢出 )。 我不知道您追求的精度是什么,比较值相差多远,因此您必须在这里做出选择。 您真的对滴答声完全相同的记录感兴趣吗? 很难想象。 也许DiffMinutes
足够好了。
另一种可能的优化是使用Any
代替Count
。 Any
生成WHERE EXISTS
子句。 这可能比SQL中的COUNT
更有效。
您得到的是,现在只传送一个布尔值(位),而不是传送可能大量的记录。
注意 :在Entity Framework 6中, EntityFunctions
已由DbFunctions
代替。
当使用某些在数据库内部无法使用的方法/属性时,LINQ to Entities经常发生这种情况。
在这种情况下,您可以将其值放在变量中。
我注意到您也有语法错误,但是您可以修复它。 在修复System.Data.Objects.EntityFunctions. p.LogDetailTime.
语法错误后,以下代码应该可以工作System.Data.Objects.EntityFunctions. p.LogDetailTime.
System.Data.Objects.EntityFunctions. p.LogDetailTime.
var ticks = logDetailTime.Ticks;
var count = this.Repository.ObjectContext.LogDetail
.Count(p => p.LogId == logId &&System.Data.Objects.EntityFunctions. p.LogDetailTime. == ticks && p.OperationId == operationId);
return (count > 0);
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.