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
})