Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/333.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何将数据重新使用到匿名类型标记中?_C#_.net_Linq_Anonymous Types - Fatal编程技术网

C# 如何将数据重新使用到匿名类型标记中?

C# 如何将数据重新使用到匿名类型标记中?,c#,.net,linq,anonymous-types,C#,.net,Linq,Anonymous Types,这是我的代码,在这里我将匿名类型声明为select: var projectsByManagersAndMonths = projectDates .Where(pd => pd.project.isEnabled) .GroupBy(pd => new { pd.project.manager, pd.project.dtEnd.Value.Month }) .Select(group => new { Mana

这是我的代码,在这里我将匿名类型声明为
select

var projectsByManagersAndMonths = projectDates
    .Where(pd => pd.project.isEnabled)
    .GroupBy(pd => new { pd.project.manager, pd.project.dtEnd.Value.Month })
    .Select(group => new
        {
            Manager = group.Key.manager.displayName,
            Month = group.Key.Month,
            Projects = group.Select(pd => new 
                { 
                    Count = group.Count(),
                    CostToComplete = group.Sum(pdd => pdd.totals.costToComplete),
                    TimeWorkable = new UserBillingRate(WS, group.Key.manager, new Period(start, end)).TimeWorkable,
                    StatusOfCharge = CostToComplete / TimeWorkable //IMPOSSIBLE
                })
        })
    .ToList();
如果您查看我添加的
//impossable
,我会尝试将上面刚刚计算的2个数据重用到相同的匿名类型中


如何实现这一点?

您必须创建一个中间对象,然后可以引用的值

var projectsByManagersAndMonths = projectDates
    .Where(pd => pd.project.isEnabled)
    .GroupBy(pd => new { pd.project.manager, pd.project.dtEnd.Value.Month })
    .Select(group => new
        {
            Manager = group.Key.manager.displayName,
            Month = group.Key.Month,
            Projects = group.Select(pd => new 
                { 
                    Count = group.Count(),
                    CostToComplete = group.Sum(pdd => pdd.totals.costToComplete),
                    TimeWorkable = new UserBillingRate(WS, group.Key.manager, new Period(start, end)).TimeWorkable,
                }).Select(pd => new 
                { 
                    Count = pd.Count,
                    CostToComplete = pd.CostToComplete,
                    TimeWorkable = pd.TimeWorkable,
                    StatusOfCharge = pd.CostToComplete / pd.TimeWorkable //POSSIBLE
                })
        })
    .ToList();

您必须创建一个中间对象,然后可以引用的值

var projectsByManagersAndMonths = projectDates
    .Where(pd => pd.project.isEnabled)
    .GroupBy(pd => new { pd.project.manager, pd.project.dtEnd.Value.Month })
    .Select(group => new
        {
            Manager = group.Key.manager.displayName,
            Month = group.Key.Month,
            Projects = group.Select(pd => new 
                { 
                    Count = group.Count(),
                    CostToComplete = group.Sum(pdd => pdd.totals.costToComplete),
                    TimeWorkable = new UserBillingRate(WS, group.Key.manager, new Period(start, end)).TimeWorkable,
                }).Select(pd => new 
                { 
                    Count = pd.Count,
                    CostToComplete = pd.CostToComplete,
                    TimeWorkable = pd.TimeWorkable,
                    StatusOfCharge = pd.CostToComplete / pd.TimeWorkable //POSSIBLE
                })
        })
    .ToList();

您可以通过添加第二级的
Select

Projects = group.Select(pd => new 
            { // This level deals with the first level of computation
                Count = group.Count(),
                CostToComplete = group.Sum(pdd => pdd.totals.costToComplete),
                TimeWorkable = new UserBillingRate(WS, group.Key.manager, new Period(start, end)).TimeWorkable
              // This level takes the computed results, and add derived computations
            }).Select(pd => new {
                pd.Count,
                pd.CostToComplete,
                pd.TimeWorkable,
              // Now that pd is an anonymous class created by the level above,
              // both pd.CostToComplete and pd.TimeWorkable are defined.
                StatusOfCharge = pd.CostToComplete / pd.TimeWorkable
            })

您可以通过添加第二级的
Select

Projects = group.Select(pd => new 
            { // This level deals with the first level of computation
                Count = group.Count(),
                CostToComplete = group.Sum(pdd => pdd.totals.costToComplete),
                TimeWorkable = new UserBillingRate(WS, group.Key.manager, new Period(start, end)).TimeWorkable
              // This level takes the computed results, and add derived computations
            }).Select(pd => new {
                pd.Count,
                pd.CostToComplete,
                pd.TimeWorkable,
              // Now that pd is an anonymous class created by the level above,
              // both pd.CostToComplete and pd.TimeWorkable are defined.
                StatusOfCharge = pd.CostToComplete / pd.TimeWorkable
            })