繁体   English   中英

LINQ to Entities不支持“ Ticks”

[英]'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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM