我想检索一个尽可能少的过时数据的数据库集,所以我编写了以下include语句
using (var context = this.Container.Resolve<IDbContextScope>()
{
var databaseRequirements = context.Requirements
.Include(x => x.RequirementVersions.MaxBy(y => y.Version))
.Include(x => x.RequirementVersions.Select(y => y.RequirementDetails));
}
所以后来我可以使用我的foreach;
foreach (MyRequirement requirement in databaseRequirements)
{
var databaseRequirementDetails = requirement.RequirementVersion.FirstOrDefault()?.RequirementDetails;
// Some more code that uses the var...
}
此处使用的数据库有3个表,Requirements
,RequirementVersions
,RequirementDetails
。 1 Requirement
有很多RequirementVersions
,1 RequirementDetails
有很多RequirementVersions
。
我最初使用MaxBy()
语句中的.Include()
来代替.FirstOrDefault()
,但是这将检索所有旧版本的要求,我不会需要在这个特定的方法中(并且根据需求量/需求量的变化,可能会大大减慢整个方法的速度)。
关于实际问题; 当我运行时,我得到了
包含路径表达式必须引用在类型上定义的导航属性。使用虚线路径作为参考导航属性,使用Select运算符作为集合导航属性。
我找不到任何关于如何以接受的方式编写此语句并执行我打算做的事情。这是一种优化努力,所以只要它比我能解决的替代方案更快。
编辑:它不是the linked article的副本,因为链接文章的已接受答案会返回单个对象,而我需要一个列表包含单个对象的对象列表。