【问题标题】:Concat returns The nested query is not supported. Operation1='UnionAll' Operation2='MultiStreamNest'Concat 返回 不支持嵌套查询。 Operation1='UnionAll' Operation2='MultiStreamNest'
【发布时间】:2016-04-06 22:51:36
【问题描述】:

我有一个查询,如下所示:

ProviderNotes.Where(it=>it.NoteEntityId == 272651).Select(it=>new
{
    Id = it.NoteId,
    Tags = it.ProviderNoteTags.Select(t => t.RelatedEntityId)
}).Concat(BookingNotes.Where(it=>it.NoteEntityId == 272651).Select(it=>new
{
    Id = it.NoteId,
    Tags = it.BookingNoteTags.Select(t => t.RelatedEntityId)
}
))

当我试图得到它的结果时,我得到了

不支持嵌套查询。 Operation1='UnionAll' Operation2='MultiStreamNest'

该查询有 2 个限制: 1)在组合之前,我无法将每个查询都设为 IEnumerable,因为我需要它以 IQueryable 形式进行进一步过滤 2)我不能通过单独的查询填充内部集合,因为每个被连接的查询都是在不同的存储库中用不同的表形成的

附:我提供的示例是在 LinqPad 中测试的。提供正在发生的事情的想法确实被简化了。

【问题讨论】:

    标签: c# sql entity-framework


    【解决方案1】:

    因为要连接的每个查询都是在具有不同表的不同存储库中形成的

    如果这些表位于不同的存储库中,那么您究竟希望 LINQ 如何将其转换为单个查询?

    这两个存储库唯一相遇的地方就是您的 LINQ 代码。因此,您的 LINQ 代码必须实现中间结果。没有其他选择。

    【讨论】:

    • 我可能没有正确解释。这些表在相同的上下文中。父表和子表具有相同的结构,唯一的区别是在 db 级别它是不同的表。我有一个基类,它形成对某个表的查询,而不是我有 repos,它们只是从这个基类继承的配置类,只是指定具体的表。为什么我不能使用中间结果是在联合之后我必须应用分页过滤器,所以我没有选择 10k 条记录来仅在屏幕上显示 5 条。顺便说一句,没有内部查询标签一切正常。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-08-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多