我有一个数据集结构,这样一个项目包含多个Job,每个Job包含多个WorkItem。我创建了以下三个类:
public class WorkItemForRollup
{
public Guid JobID { get; set; }
public string Description { get; set; }
public decimal Price { get; set; }
public DateTime ScheduledDate { get; set; }
}
public class JobForRollup
{
public Guid JobID { get; set; }
public string JobName { get; set; }
public decimal Price { get; set; }
public DateTime ScheduledStart { get; set; }
public List<WorkItemForRollup> WorkItems { get; set; }
}
public class ProjectRollup
{
public decimal Total { get; set; }
public List<JobForRollup> Jobs { get; set; }
}
有人可以告诉我实例化此内容并随后将值分配给类成员的语法吗?这是我一直在努力的工作:
ProjectRollup projectRollup = new ProjectRollup() { Jobs = new List<JobForRollup>() };
JobForRollup jobsForRollup = new JobForRollup() { WorkItems = new List<WorkItemForRollup>() };
然后我可以做一个projectRollup.Jobs.Add(job);
,其中“ job”是JobForRollup实体,
但我不知道如何将我的WorkItem添加到每个Job中。
您能帮忙还是给我看看另一种可行的方法?谢谢!
答案 0 :(得分:1)
实际上,这不是实例化此n级嵌套类型的好方法,但是以下代码是示例:
ProjectRollup projectRollup = new ProjectRollup()
{
Jobs = new List<JobForRollup>()
{
new JobForRollup()
{
JobID = Guid.NewGuid(),
JobName = "job1",
Price = 434,
ScheduledStart = DateTime.Now,
WorkItems = new List<WorkItemForRollup>()
{
new WorkItemForRollup()
{
Description="item1",
Price = 34,
ScheduledDate = DateTime.Now
}
}
}
}
};
您应该attach
将每个嵌套的对象和集合放在一起。
描述您的问题并解释为什么不使用EntityFramework
,nhibernate
等ORM?
答案 1 :(得分:1)
要初始化列表,可以用这种方式编写类
public class WorkItemForRollup
{
public Guid JobID { get; set; }
public string Description { get; set; }
public decimal Price { get; set; }
public DateTime ScheduledDate { get; set; }
}
public class JobForRollup
{
public Guid JobID { get; set; }
public string JobName { get; set; }
public decimal Price { get; set; }
public DateTime ScheduledStart { get; set; }
public List<WorkItemForRollup> WorkItems { get; set; } = new List<WorkItemForRollup();
}
public class ProjectRollup
{
public decimal Total { get; set; }
public List<JobForRollup> Jobs { get; set; } = new List<JobForRollup>();
}
现在,您每次构建这些类的新实例时,都会自动初始化所有List属性。该语法称为Initialize Auto-Implemented properties,从C#6.0开始可用。
现在,应该接收适当类型的项目的List属性已正确初始化,但是,当然它们是空的。
要将项目添加到JobForRollup类中的WorkItems中,您需要创建WorkItemForRollup的实例并将其添加到JobForRollup实例
ProjectRollup projectRollup = new ProjectRollup();
JobForRollup job = new JobForRollup();
job.WorkItems.Add(Get_A_WorkItem_Instance_From_Your_Code());
projectRollup.Jobs.Add(job);
// As an example
private WorkItemForRollup Get_A_WorkItem_Instance_From_Your_Code()
{
WorkItemForRollup item = new WorkItemForRollup
{
Description="Description",
Price = 42.42m,
ScheduledDate = DateTime.Now.AddDays(30);
};
return item;
}
答案 2 :(得分:0)
初始化嵌套集合总是一件令人讨厌的事情。但是,由于您已经具有属性,因此这很简单。只需停止使用自动实现属性,然后编写自己的属性即可:
success: function (data) {
// ... do stuff
writeData(data);
}
编写自己的属性代码的最大危险是偶然使其他类代码访问了后备字段。但是,添加下划线作为前缀已经证明足够可靠,可以在Microsoft的所有示例代码中使用。