.net 将DataTable转换为字典并使用小写合并列

ztmd8pv5  于 2023-01-31  发布在  .NET
关注(0)|答案(2)|浏览(160)

我有一个类似这样的数据表:
| 色谱柱1|色谱柱2|色谱柱3|
| - ------|- ------|- ------|
| 姓名1|代码111|小行星12550|
| 姓名2|代码112|小行星12551|
| 姓名3|代码113|小行星12552|
| 姓名4|代码114|小行星12553|
我想把它转换成一个字典,其中第一列是键,第二列小写字母和第三列的组合是值。
预期结果:
| 键|价值|
| - ------|- ------|
| 姓名1|代码111_12550|
| 姓名2|代码112_12551|
| 姓名3|代码113_12552|
| 姓名4|代码114_12553|
这是我的代码:

DataTable dt = new DataTable();
dt.Columns.Add("Column1");
dt.Columns.Add("Column2");
dt.Columns.Add("Column3");

dt.Rows.Add("Name1", "Code111", 12550);
dt.Rows.Add("Name2", "Code112", 12551);
dt.Rows.Add("Name3", "Code113", 12553);
dt.Rows.Add("Name4", "Code114", 12554);

Dictionary<string,string> dic = new Dictionary<string,string>();

for (int i = 0; i < dt.Rows.Count; i++)
{
    string _k = dt.Rows[i][0].ToString();
    string _v = dt.Rows[i][1].ToString().ToLower()+ "_" +
    dt.Rows[i][2].ToString();

    dic.Add(_k, _v);
}

有没有更好的方法把数据表转换成字典?例如,我可以用Linq吗?

6jygbczu

6jygbczu1#

您可以使用linq.enumerable.todictionaryDataTable转换为Dictionary

var _dic = dt.AsEnumerable()
                   .ToDictionary<DataRow, string, string>(row => row.Field<string>(0),
                   row => row.Field<string>(1).ToLower() + "_" + row.Field<string>(2) );
6ovsh4lw

6ovsh4lw2#

由于.NET 6是受支持的最早的.NET核心版本,因此可以使用范围将代码缩减为:

var dict=dt.AsEnumerable().ToDictionary(
    r=>r[0],
    r=>String.Join('_',r.ItemArray[1..]));

如果值需要小写,可以在连接后调用ToLower()

var dict=dt.AsEnumerable().ToDictionary(
    r=>r[0],
    r=>String.Join('_',r.ItemArray[1..])?.ToLower());

相关问题