如何减少创建解析数据集的对象数量?

时间:2015-11-08 21:25:54

标签: c# datatable dataset datarow

数据集由两列表组成。表名=项目。一列名称=名称,其他列名称=资源。有多个重复的项目名称。

var dataset = FakeDataset.CreateDataset();
        var projectList = new List<Project>();

        foreach (DataTable table in dataset.Tables)
        {
            foreach (DataRow dataRow in table.Rows)
            {
                projectList.Add(new Project { Name = Convert.ToString(dataRow["Name"]), Resource = Convert.ToString(dataRow["Resource"]) });
            }
        }

现在我每次为数据集中的单个项目名称创建一个Project对象。我想要的是 - 仅为数据集中的唯一项目名称创建Project对象。我是初学者,所以这是一个很好的简单解决方案。

1 个答案:

答案 0 :(得分:0)

没有经过测试,我不确定我是否理解正确,但是我的假设 你想要这样的东西:

    var dataset = FakeDataset.CreateDataset();
                    var projectList = new List<Project>();

                    foreach (DataTable table in dataset.Tables)
                    {
                        foreach (DataRow dataRow in table.Rows)
                        {
                              if(projectList.Any(Project => Project.Name == dataRow["Name"]))
                                       projectList.Add(new Project { Name = Convert.ToString(dataRow["Name"]), Resource = Convert.ToString(dataRow["Resource"]) });
                        }
                    }

编辑:

var dataset = FakeDataset.CreateDataset();
var projectList = new List<Project>();

    foreach (DataTable table in dataset.Tables)
    {
            foreach (DataRow dataRow in table.Rows)
            {
                    if (!projectList.Any(Project => Project.Name == Convert.ToString(dataRow["Name"])))
                    {
                        projectList.Add(new Project { Name = Convert.ToString(dataRow["Name"]), Resource = Convert.ToString(dataRow["Resource"]) });
                    }
                    else
                    {
                        Project p = projectList.Find(Project => Project.Name == Convert.ToString(dataRow["Name"]));
                        projectList[projectList.IndexOf(p)].Resource += "\r\n" + Convert.ToString(dataRow["Name"]);
                    }
            }
     }