Linq to Entities:嵌套的SelectMany返回它想要的任何内容

时间:2014-02-26 11:17:10

标签: c# linq entity-framework linq-to-entities

我正在尝试从我的域对象集中选择自定义类型,并注意到非常奇怪的EF行为。我完全可以弄明白,为什么会发生这种情况。所以我有:

public class Person 
{ 
    public IList<Device> Devices { get; set; } 
}
public class Device  
{ 
    public DeviceConfiguration DeviceConfiguration  { get; set; } 
}
public class DeviceConfiguration 
{ 
    public IList<DeviceFeature> DeviceFeatures { get; set; } 
}
public class DeviceFeature 
{ 
    public DeviceFeatureType DeviceFeatureType  { get; set; } 
}

我想从Persons设置中选择自定义类型:

var personDTOs = persons.Select(x => 
    new PersonDTO 
    { 
        Devices = x.Devices, 
        DeviceFeatures = x.Devices.SelectMany(y => y.DeviceConfiguration.DeviceFeatures ) 
    });

问题是DeviceFeatures填充了一些随机条目,即使Person没有任何Devices

为什么会发生这种情况?

更新1:

我忘了提到的一件重要事情是personDTOs之后的排序和分页(OrderBy, Skip, Take, ToList)和这些“随机”的DeviceFeature仅包含在此之后。但如果我在这些行动之前选择有问题的条目,我可以看到一切都如预期的那样。延迟执行和/或选择自定义类型有问题,但我不明白究竟是什么以及什么是做这种选择的正确方法

0 个答案:

没有答案