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

时间:2015-11-09 20:27:56

标签: c# dictionary dataset object-initializers

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

我有什么想法可以解决这个问题?最好不要使用LINQ / Lambda。 我收到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()) });
            }
        }            
    }
}

1 个答案:

答案 0 :(得分:0)

像这样编写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属性?