4

我知道这不会像写的那样工作,但我很难找到正确的答案,这个非功能性代码希望能说明我想要实现的目标:

var defaults = _cilQueryContext.DefaultCharges
                    .Where(dc => dc.ChargingSchedule_RowId == cs.RowId);

List<DevelopmentType> devTypes = 
        defaults.Select(dc => dc.DevelopmentType)
                .Include(d => d.DefaultCharges)
                .Include(d => d.OverrideCharges.Where(oc => oc.ChargingSchedule_RowId == cs.RowId))
                .Include(d => d.OverrideCharges.Select(o => o.Zone))
                .ToList();

本质上,我认为这需要一个连接,但是当我试图选择一个包含两种相关类型的子对象的父对象时,我看不到连接的“select new”子句中会发生什么。

4

1 回答 1

2

据我所知Include,不支持这种类型的子查询。您最好的选择是使用投影,例如

List<DevelopmentType> devTypes = 
           defaults.Include(x => x.DefaultCharges)
                   .Include(x => x.OverrideCharges)
                   .Select(x => new {
                        DevType = x.DevelopmentType,
                        Zones = x.OverrideCharges.Where(oc => oc.ChargingSchedule_RowId == cs.RowId)
                                                 .Select(oc => oc.Zone).ToList()
                   })
                   .Select(x => x.DevType)
                   .ToList();
于 2013-11-04T15:20:56.043 回答