如果我正在创建一个新的类对象并分配其属性值,如下所示:
foreach (var item in lstOfPersonnel)
{
ClassNameVM personVM = new ClassNameVM ()
{
Name = item.FirstName + " " + item.LastName,
TimeTotalPFID = lstSummaries.Where(x => x.PFID == item.ID).Sum(x => x.Time),
TimeTotalPNFID = lstSummaries.Where(x => x.PNFID == item.ID).Sum(x => x.Time),
TimeTotalVO = lstSummaries.Where(x => x.VO == item.ID).Sum(x => x.Time),
TotalTime = // trying to do TimeTotalPFID + TimeTotalPNFID + TimeTotalVO.. but I can't access those properties.
};
newListPersonnel.Add(personVM);
}
Run Code Online (Sandbox Code Playgroud)
如何访问TimeTotalPFID,TimeTotalPNFID,TimeTotalVO对象本身的属性?
您无法访问这些属性,因为它们在该匿名对象调用的范围内在技术上不存在.
考虑在声明下面的行上设置该属性:
ClassNameVM personVM = new ClassNameVM ()
{
Name = item.FirstName + " " + item.LastName,
TimeTotalPFID = lstSummaries.Where(x => x.PFID == item.ID).Sum(x => x.Time),
TimeTotalPNFID = lstSummaries.Where(x => x.PNFID == item.ID).Sum(x => x.Time),
TimeTotalVO = lstSummaries.Where(x => x.VO == item.ID).Sum(x => x.Time),
};
// Set your properties here
personVM.TotalTime = personVm.TimeTotalPFID + personVM.TimeTotalPNFID + personVM.TimeTotalVO;
Run Code Online (Sandbox Code Playgroud)
考虑一个构造函数
或者,您可以定义一个构造函数,该构造函数将接受您的item类型的参数并使用它:
public ClassNameVM(YourItemType item)
{
Name = item.FirstName + " " + item.LastName;
TimeTotalPFID = lstSummaries.Where(x => x.PFID == item.ID).Sum(x => x.Time);
TimeTotalPNFID = lstSummaries.Where(x => x.PNFID == item.ID).Sum(x => x.Time);
TimeTotalVO = lstSummaries.Where(x => x.VO == item.ID).Sum(x => x.Time);
TotalTime = TimeTotalPFID + TimeTotalPNFID + TimeTotalVO;
}
Run Code Online (Sandbox Code Playgroud)
这将使您更容易使用:
foreach (var item in lstOfPersonnel)
{
newListPersonnel.Add(new ClassNameVM(item));
}
Run Code Online (Sandbox Code Playgroud)