在foreach循环中分析数据集时,设置对象Dictionary类型的属性

本文关键字:对象 设置 Dictionary 类型 属性 循环 foreach 数据集 | 更新日期: 2023-09-27 18:21:25

所以我有这个问题。我有一个具有NameResource属性的Project类。我有DataSet,我想从数据集中设置Resource属性值(类型为Dictionary)。这就是我挣扎的地方。

有什么想法我可以解决这个问题吗?优选不使用LINQ/Lambda s。我收到Invalid Initializer member declarator错误。我希望有一个适当的方法来做到这一点,这样错误就不相关了。提前感谢!

public class FakeDataset
{    
    public static System.Data.DataTable TTable()
    {
        DataTable table = new DataTable("Resources");
        table.Columns.Add("Name", typeof(string));
        table.Columns.Add("Resource", typeof(string));
        table.Columns.Add("Value", typeof(string));            
        table.Rows.Add("Project", "Resource1", "11");
        table.Rows.Add("Project", "Resource2", "12");
        table.Rows.Add("Project", "Resource3", "9");
        table.Rows.Add("Project22", "Resource1", "1");
        table.Rows.Add("Project22", "Resource2", "2");
        return table;
    }
    public static DataSet CreateDataset()
    {            
        DataSet dataset = new DataSet("ProjectDataset");            
        dataset.Tables.Add(TTable());
        return dataset;
    }
}   
public class Project
{
    public string Name { get; set; }
    public Dictionary<string, string> Resource { get; set; }
}
class Program
{
    public static void Main()
    {
        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.Add(dataRow["Resource"].ToString(), dataRow["Value"].ToString()) });
            }
        }            
    }
}

在foreach循环中分析数据集时,设置对象Dictionary类型的属性

这样编写for循环将解决问题

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

或者,使用集合初始化语法

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

但是,你真的需要Resource作为Dictionary<,>吗?到目前为止,每个Project类只包含一个条目。也许你只需要两个string属性?