使用LINQ将DataRow转换为Dictionary

21

我需要使用LINQ将DataRow转换为Dictionary。

以下代码将获取DataRow,接下来的步骤是将其转换为字典(ColumnName,RowVale)。

var WorkWeekData = from data in mWorkWeekData.AsEnumerable ()
            where data.Field<string> ("Code") == code
            select data;

请查看此SO链接 - Pavan Teja
2个回答

46

肯定可以,是的:

var dict = row.Table.Columns
              .Cast<DataColumn>()
              .ToDictionary(c => c.ColumnName, c => row[c]);

1
当我尝试使用这种方法来提高性能时,发现它比使用更长的解决方案要慢得多。您“可以”使用此方法。

这种方式:

foreach (DataRow row in dtIn.Rows)
{
    dictionary.Clear();
    foreach (DataColumn dataColumn in dtIn.Columns)
    {
        dictionary.Add(dataColumn.ColumnName, row[dataColumn.ColumnName].ToString());
    }
}

比以下方式快得多:
foreach (DataRow row in dtIn.Rows)
{
    dictionary = row.Table.Columns.Cast<DataColumn>()
        .ToDictionary(c => c.ColumnName, c => row[c].ToString());
}

请注意,您还需要考虑可空列。如果值为DBNull,则.ToString()将引发错误。 - Storm

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接