LINQ包括在传递参数时不包含相关实体

时间:2014-09-29 18:29:52

标签: c# entity-framework linq entity-framework-4

我有以下代码。当我没有给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();

2 个答案:

答案 0 :(得分:0)

Include仅表示Jobs属性在执行查询时不会推迟执行,并且每条记录也将返回所有相关的Jobs记录。在您的联接中,您实际上是过滤掉没有符合给定条件的作业的文件。您没有过滤掉这些文件的作业,而是过滤掉所有具有这些作业的文件。 Include不会阻止过滤掉这些文件。

答案 1 :(得分:0)

Eren Ersönmez指出Include接口有IQueryable函数后,我决定尝试将EF4升级到EF6,并且通过此更新,该功能可用!这在Microsoft的文档中并不清楚。

如果这可以帮助其他人,我已经关注了如何从EF4更新到EF6的this tutorial