【问题标题】:How to reduce the amount of objects created parsing dataset?如何减少解析数据集创建的对象数量?
【发布时间】:2015-11-08 21:25:53
【问题描述】:

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

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"]) });
            }
        }

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

【问题讨论】:

  • 是什么让你认为 Linq 会减少创建的对象数量?这只是做同一件事的一种不同方式...

标签: c# datatable dataset datarow


【解决方案1】:

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

    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"]);
                    }
            }
     }

【讨论】:

  • 你的代码应该做什么?我的意思是 if 语句中的逻辑是什么?
  • 据我了解,您希望停止添加任何具有重复名称的项目。 if 语句检查列表中是否有任何与您要添加的名称相同的项目。
  • 我想停止创建具有重复名称的项目对象,但仍设置项目资源属性。想象一个 2 行表。第一行是项目名称,另一行是资源。一个项目可以有很多资源。但我不想为每个资源创建项目对象。不知何故,我想创建一个项目并设置它的资源。如果可能的话,不要使用 LINQ。
  • 编辑后检查,使用 LINQ 但应该可以工作。 (未经测试,无法自动取款,用记事本编写:/)您应该能够修复错误
猜你喜欢
  • 2012-11-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-11-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多