CountryData:
Keyid Data1 Data2
200 London UK
200 Paris France
200 Vancouver Canada
201 NYC US
我在数据集中有这些数据,我想循环并形成类对象,如
Class CountryData
{
int keyid;
public struct MyData()
{string data1, string data2 }
public MyData Data ;
}
输出应该看起来像
列出countryData = new List();
此countryData应保存此类数据(预期结果)
countryData[0]
-keyid - 200
Data[0].Data1 - London
Data[0].Data2 - UK
Data[1].Data1 - Paris
Data[1].Data2 - France
Data[2].Data1 - Vancouver
Data[2].Data2 - Canada
countryData[1]
-keyid -201
Data[0].Data1 - NYC
Data[0].Data2 - US
我尝试按数据集分组,但是,我没有得到上述预期结果:
DataTable dt = ds.Tables[0].AsEnumerable()
.GroupBy(r => r["keyid"])
.Select(y=>y.FirstOrDefault()).CopyToDataTable();
如何根据/任何其他方法进行分组?提前谢谢。
答案 0 :(得分:0)
您可以在foreach语句中手动实现此功能,它可能有点复杂,但它为您提供了所需的相同结构:
var myMainData = new Dictionary<int, List<Dictionary<string, string>>>();
var myDataValue = new List<Dictionary<string, string>>();
var values = new Dictionary<string, string>();
//get the first key once
int lastKeyId = Convert.ToInt32(dataSet.Tables["CountryData"].Rows[0]["Keyid"]);
foreach (DataRow row in dataSet.Tables["CountryData"].Rows)
{
int key = Convert.ToInt32(row["Keyid"]);
if (lastKeyId != key)
{
myMainData.Add(key, myDataValue); //add this to the dictionary
myDataValue.Clear(); //clear previous list value
values.Clear(); //clear previous values
}
//add new values
values.Add(row["Data1"].ToString(), row["Data2"].ToString());
myDataValue.Add(values);
lastKeyId = key; //set the current key
}
现在,您可以在代码中的任何位置使用myMainData字典。