Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/292.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 为什么不从这个linq查询中删除子项?_C#_Entity Framework_Linq - Fatal编程技术网

C# 为什么不从这个linq查询中删除子项?

C# 为什么不从这个linq查询中删除子项?,c#,entity-framework,linq,C#,Entity Framework,Linq,我有一个linq查询,它检索数据库中的所有元素,并根据一些条件过滤输出 我想要一个特定实体的列表,其中只有符合特定过滤器的属性 var entitiesWithLookupsTolookupEntityName = schemaRepository .Many() .OrderByDescending(x => x.Version) .Take(1) .Include(x => x.Entities)

我有一个linq查询,它检索数据库中的所有元素,并根据一些条件过滤输出

我想要一个特定实体的列表,其中只有符合特定过滤器的属性

    var entitiesWithLookupsTolookupEntityName = schemaRepository
        .Many()
        .OrderByDescending(x => x.Version)
        .Take(1)
        .Include(x => x.Entities)
        .ThenInclude(x => x.Attributes)
        .ThenInclude(x => x.AttributeTypeSpecification)
        .SelectMany(x => x.Entities
            .Where(x => x.Attributes.Any(y => y.Type == DataType.Lookup && y.AttributeTypeSpecification.EntityInternalName == lookupEntityName))).AsEnumerable();
这将返回符合筛选器的唯一实体,但也包括不符合筛选器的实体的所有属性

我可以在第二个类似这样的查询中过滤掉它们

        var attributefiltered = entitiesWithLookupsTolookupEntityName.SelectMany(x =>
            x.Attributes.Where(y =>
                y.Type == DataType.Lookup && y.AttributeTypeSpecification.EntityInternalName == lookupEntityName));
但是为什么我不能把这两个结合起来呢

看起来很奇怪,我能做到两步,但不是一步?
使用.where().any()有问题。

这是否回答了您的问题?它可能是在您的通话中选择了许多。在第一个示例中,选择many returned
x=>x.Entities.Where
。在第二个示例中,它返回了
x=>x.Attributes.Where
。也许这是主要的区别?@SeanSkelly但是我如何在属性级别而不是实体上应用
Where
子句呢?是的,正如所写的,您返回与筛选匹配的实体(基于其属性),但它不会删除属性。您在第一次调用时过滤了哪些属性。然后包括哪些属性?该调用没有筛选要包含的属性。
。然后包含(x=>x.attributes)
变成
。然后包含(x=>x.attributes.Where(y=>…
然后在“…”中添加过滤。这是否回答了您的问题?可能是在您调用SelectMany时。在第一个示例中,SelectMany返回
x=>x.Entities。其中
。在第二个示例中,它返回
x=>x.Attributes。其中
。这可能是主要区别?@SeanSkelly但我如何应用e
Where
子句位于属性级别而不是实体上?是的,正如所写,您返回与筛选匹配的实体(基于其属性),但它不会删除属性。您在第一次调用时过滤了哪些属性。然后包括?该调用不会过滤要包括哪些属性。
。然后包括(x=>x.attributes)
成为
。然后包括(x=>x.attributes。其中(y=>…
并将过滤添加到“…”中