我在 GROUP BY 和急切加载方面遇到问题。我尝试解释我在做什么。
我正在查询数据上下文 ctx 的事件
事件类具有以下属性
string Description
DateTime Date
bool IsDeleted
Guid SubjectId
string Title
DateTime Created
Guid ForProjectId
Person TriggeredBy
List<Guid> Targets
有多个具有相同主题 ID 的事件,我希望最终拥有具有唯一主题 ID 的事件,并且这些事件是组中最新的。我最终得到以下查询。
var events = from x in
(from e in ctx.Events
.Include("TriggeredBy")
.Include("Targets")
group e by e.SubjectId
into g
select new
{
GroupId = g.Key,
EventsWithSameSubjectId = g,
}
)
select x.EventsWithSameSubjectId
.OrderByDescending(y => y.Created).FirstOrDefault();
查询编译良好并返回正确的结果集。但包含的属性始终为空。
当我删除查询以查看急切加载是否正常工作时......
var events = (from e in ctx.Events.OfType<DataNotificationEvent>()
.Include("TriggeredBy")
.Include("Targets")
select e).ToList();
这将返回具有所有包含属性的事件。
这是 Linq / EF 的已知问题/错误吗?或者有什么方法可以消除此错误。
Regards
文森特·奥滕斯
您正在投影到匿名类型,所以Include()
不会那样工作的。因为你所做的group
而投影到匿名类型就是改变查询的形状。这会消除急切的加载。阅读本文可能有帮助。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)