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