数据表选择值,其中字段类型未知或在运行时

时间:2015-04-14 17:04:47

标签: c# linq datatable

我有一个简单的linq查询

linqdt.AsEnumerable()
      .Where(w => (w.Field<string>(options.SelectedColumn)).Contains(options.Value))
      .CopyToDataTable();

如果SelectedColumn类型是字符串(a.Field),这将返回结果。 现在我的问题是option.SelectedColumn可以是多种类型。它可能是字节,日期,guid等等,直到运行时我都不知道这些类型。

我想知道是否有任何方法可以传递像w.Field这样的变量,并且该变量包含基于SelectedColumn的数据类型?如果不是,还有什么其他可能性?

任何帮助都会受到高度赞赏

1 个答案:

答案 0 :(得分:1)

由于Contains仅适用于字符串值,我会使用if语句来检查字符串值,并使用非通用列访问器和Equals用于其他列:

DataTable result;
if(linqdt.Columns[options.SelectedColumn].DataType == typeof(string))

    result = linqdt.AsEnumerable()
                   .Where(w => (w.Field<string>(options.SelectedColumn))
                                 .Contains(options.Value))
                   .CopyToDataTable();
else
    result = linqdt.AsEnumerable()
                   .Where(w => (w[options.SelectedColumn]).Equals(options.Value))
                   .CopyToDataTable();