我有一个简单的linq查询
linqdt.AsEnumerable()
.Where(w => (w.Field<string>(options.SelectedColumn)).Contains(options.Value))
.CopyToDataTable();
如果SelectedColumn类型是字符串(a.Field),这将返回结果。 现在我的问题是option.SelectedColumn可以是多种类型。它可能是字节,日期,guid等等,直到运行时我都不知道这些类型。
我想知道是否有任何方法可以传递像w.Field这样的变量,并且该变量包含基于SelectedColumn的数据类型?如果不是,还有什么其他可能性?
任何帮助都会受到高度赞赏
答案 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();