C# 导航属性保持为空,即使在过滤掉它们之后也是如此
我在这里碰到了一堵砖墙,事情正在发生,它们似乎违反直觉 我有一个大约40k的实体集合,我正试图将其转换为视图模型。 我正在使用以下代码来完成此操作C# 导航属性保持为空,即使在过滤掉它们之后也是如此,c#,.net,linq,entity-framework,linq-to-entities,C#,.net,Linq,Entity Framework,Linq To Entities,我在这里碰到了一堵砖墙,事情正在发生,它们似乎违反直觉 我有一个大约40k的实体集合,我正试图将其转换为视图模型。 我正在使用以下代码来完成此操作 var ents= (from ent in entities.ents where ent != null && ent.Prop1 != null && ent.Prop2 != null select ent).ToList(); ConcurrentBag<V
var ents= (from ent in entities.ents
where ent != null && ent.Prop1 != null && ent.Prop2 != null
select ent).ToList();
ConcurrentBag<VmEnt> filtered = new ConcurrentBag<VmEnt>();
Parallel.ForEach(ents.AsParallel(), ent =>
{
var vm = new VmEnt
{
Name = ent.Name,
Prop1 = new VmProp1
{
Id = ent.Prop1.Id,
Name = ent.Prop1.Name,
},
Prop2= new VmProp2
{
Id = ent.Prop2.Id,
Images = ent.Prop2.Images.Select(y => y.ImageUrl).ToList()
},
Prop3= ent.Prop3.Select(y => new VmProp3
{
Id = y.Id,
Name = y.Name
},
};
filtered.Add(vm);
});
我遇到的问题是,在并行循环中,即使在过滤掉这些引用之后,仍然存在ent.Prop1的空引用。我错过了一些非常简单的东西吗?还是我做错了什么?实体是EntityFramework上下文吗? Prop1、Prop2和Prop3是导航属性吗 如果是这种情况,您还需要加载它们。 可以通过在linq查询加载中使用DbSet的Include方法来实现这一点,稍后使用Load方法加载它们,或者启用延迟加载,以便在访问属性时加载这些导航属性。我个人更喜欢前两种方法,具体取决于用例
您还可以通过在linq查询的select上创建视图模型来简化此代码。这样,你就不需要创建一个列表,只是为了让它运行。。。您甚至可以使用AsParel创建视图模型对象。您确定不是Prop3为空吗?异常是什么?异常是Prop1上的null引用,这是不寻常的,因为Ent中的FK字段Prop1Key是非null的。