数据库
首页 > 数据库> > c# – Linq到SQL Server 2005上的EF 4实体

c# – Linq到SQL Server 2005上的EF 4实体

作者:互联网

‘Cannot compare elements of type ‘System.Collections.Generic.ICollection`1′. Only primitive types (such as Int32, String, and Guid) and entity types are supported.’

实体&关系(导航属性):

Case (1 <-> ∞) MeetingCase (1 <-> ∞) MeetingCaseOutcomes

违规代码是:

IQueryable<Case> cases; // this is obviously attached to a context and able to access data)
var broken = cases
   .Where(c => c.MeetingCases
      .Where(mc => mc.ExpectedStartDateTime <= DateTime.Now)
         .Any(m => m.MeetingCaseOutcomes == null || m.MeetingCaseOutcomes.Count == 0));

我认为问题是由于缺乏对’Any’运算符的支持,尽管我认为这可以在EF 4中工作(因为已经添加了对相关’Contains’运算符的支持).

我应该如何重新构建这个调用以产生我想要的东西?

我已经与EF合作了好几个月,并了解了很多运行时问题

更新:

上面的Where子句确实包含谓词,如下所示:

c.MeetingCases.Where(mc => mc.ExpectedStartDateTime <= DateTime.Now)
              .Any(m => m.MeetingCaseOutcomes == null || m.MeetingCaseOutcomes.Count == 0)

因为Any返回一个布尔值,所以整个事件产生一个谓词表达式.

此外,此逻辑的目的是返回一组Case对象,这些对象对于已经进行会议的任何MeetingCase记录没有MeetingCaseOutcome记录(因此与DateTime.Now进行比较).这是会议安排系统的一部分,这是为了检查会议结束后是否将每次会议的结果输入系统.

解决方法:

EF 1和EF 4都支持.Any().问题是你没有充分利用它.

标签:c,sql-server-2005,entity-framework-4,linq-to-entities
来源: https://codeday.me/bug/20190630/1340042.html