system.data.enumerablerowcollection到List <t>,在运行时</t>

时间:2014-04-03 13:30:26

标签: c# .net linq

List<string> values_ofColumn = MasterDataTableObject.AsEnumerable().Select(s => s.Field<string>(ColumnName)).Distinct().ToList<string>();

我使用上面的Query来从数据表中读取特定列的所有值。 如果我想读所有的列,我必须处理所有的情况

foreach (string ColumnName in AllColumns)
{
    List<string> values_ofColumn = null;
    if (MasterDataTableObject.Columns[ColumnName].DataType.Name.ToString() == "String")
    {
        values_ofColumn = MasterDataTableObject.AsEnumerable().Select(s => s.Field<string>(fieldAttribute)).Distinct().ToList<string>();
    }
    if (MasterDataTableObject.Columns[ColumnName].DataType.Name.ToString() == "Double")
    {
        values_ofColumn = MasterDataTableObject.AsEnumerable().Select(s => s.Field<double>(fieldAttribute).ToString()).Distinct().ToList<string>();
    }
    if (MasterDataTableObject.Columns[ColumnName].DataType.Name.ToString() == "DateTime")
    {
        values_ofColumn = MasterDataTableObject.AsEnumerable().Select(s => s.Field<DateTime>(fieldAttribute).ToString("MM/dd/yyyy HH:mm:ss")).Distinct().ToList<string>();
    }
}

为什么我添加了很多if else语句... 我无法在MasterDataTableObject.Columns[ColumnName].DataType中标记Field<T> 我知道,这是编译时映射。

有什么办法可以摆脱使用if else

谢谢

1 个答案:

答案 0 :(得分:1)

foreach (string ColumnName in AllColumns)
{
    List<string> values_ofColumn = null;
    var coll =  (
                                from row in MasterDataTableObject.AsEnumerable()
                                select row[ColumnName]
                );
    values_ofColumn = coll.Select(row => row.ToString()).Distinct().ToList<string>();
}