我有以下代码。当我没有给param“current”和“version”这样它只运行第一行时,最后的lstFile变量包含带有相关作业的文件。如果给出“当前”参数或“版本”参数,则返回没有相关作业的文件。但是,由于我在第一步中包含了乔布斯,为什么相关的乔布斯在这个过程中会丢失?
顺便说一下,延迟加载是关闭的,这就是我需要做include的原因。
IQueryable<File> filteredFiles = entities.Files.Include("Jobs");
if (!String.IsNullOrWhiteSpace(current))
{
bool bActive = current == "1" ? true : false;
filteredFiles =
from f in filteredFiles
join j in entities.Jobs
on f.IDFile equals j.IDFile
where j.Active == bActive
select f;
}
if (!String.IsNullOrWhiteSpace(version))
{
filteredFiles =
from f in filteredFiles
join j in entities.Jobs
on f.IDFile equals j.IDFile
where j.Version == version
select f;
}
List<File> lstFile = filteredFiles.Distinct().ToList();
答案 0 :(得分:0)
Include
仅表示Jobs
属性在执行查询时不会推迟执行,并且每条记录也将返回所有相关的Jobs
记录。在您的联接中,您实际上是过滤掉没有符合给定条件的作业的文件。您没有过滤掉这些文件的作业,而是过滤掉所有具有这些作业的文件。 Include
不会阻止过滤掉这些文件。
答案 1 :(得分:0)
在Eren Ersönmez指出Include
接口有IQueryable
函数后,我决定尝试将EF4升级到EF6,并且通过此更新,该功能可用!这在Microsoft的文档中并不清楚。
如果这可以帮助其他人,我已经关注了如何从EF4更新到EF6的this tutorial。