所以我有这个问题。我的Project类具有Name
和Resource
属性。我有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()) });
}
}
}
}
答案 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
属性?