使用 SelectMany 获取具有父项的实体集合会抛出 InvalidOperationException

Using SelectMany to get collection of entities with parents throws InvalidOperationException

我有一个数据库模型,它有一个父类 属性,它自己的类型如下:

public class MainModel 
{
    public int Id { get; set; }

    public Entity Entity { get; set; };
}

public class Entity 
{
    public int Id { get; set; }

    public int ParentId { get; set; }
    public Entity Parent { get; set; }
}

现在我想获取与 MainModel 实例相关的所有实体的集合。 到目前为止,我已经尝试使用 SelectMany,创建一个包含实体本身及其父实体的新实体数组。但这会引发 InvalidOperationException

modelInstances.SelectMany(m => new []{ m.Entity, m.Entity.Parent });

异常:

System.InvalidOperationException
Processing of the LINQ expression 'm => new Entity[]
{
    m.Entity,
    m.Entity.Parent,
    m.Entity.Parent.Parent 
}' by 'NavigationExpandingExpressionVisitor' failed. 
This may indicate either a bug or a limitation in  EF Core. See https://go.microsoft.com/fwlink/?linkid=2101433 for more detailed information.

我有点困惑,因为在 EFCore Docs 中它说 SelectMany 受 LINQ-to-SQL

支持

有人知道我在这里可能遗漏了什么吗? 或者另一种获取实体及其父实体列表的方法。

我想它不能将数组的创建转换为 SQL。 我会尝试以 Entity Framework 支持的形式加载您想要的数据。

我会 select 数据,从数据库中获取数据,然后按照您想要的方式转换结果。类似于:

var listOfEntitiesAndParents = modelInstances.Select(m => new { m.Entity, m.Entity.Parent }).ToList();

var flatList = listOfEntitiesAndParents.SelectMany(e=>new [] {e.Entity, e.Parent}).ToList();

或 var flatList = listOfEntitiesAndParents.Select(e=>e.Entity).Union(listOfEntitiesAndParents.Select(e=>e.Parent)).ToList();

希望对您有所帮助