gpt4 book ai didi

c# - Linq to Entities over SQL Server 2005 上的 EF 4

转载 作者:行者123 更新时间:2023-11-30 12:16:35 25 4
gpt4 key购买 nike

'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));

我认为问题是由于缺乏对“任何”运算符的支持,尽管我认为这在 EF 4 中可行(因为已添加对相关“包含”运算符的支持)。

我应该如何重新构造此调用以产生我想要的结果?

我已经使用 EF 几个月了,并且了解许多运行时陷阱

更新:

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

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

因为 Any 返回一个 bool 值,整个事情产生一个谓词表达式。

此外,此逻辑的目的是返回一组 Case 对象,这些对象没有 MeetingCaseOutcome 记录,用于 session 已经发生的任何 MeetingCase 记录(因此与 DateTime.Now 进行比较)。这是 session 安排系统的一部分,用于检查每次 session 的结果是否在 session 召开后输入系统。

最佳答案

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

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.Any()));

关于c# - Linq to Entities over SQL Server 2005 上的 EF 4,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5074550/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com