使用 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();
希望对您有所帮助
我有一个数据库模型,它有一个父类 属性,它自己的类型如下:
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();
希望对您有所帮助