我正在尝试对 DataTable 执行 LINQ 查询并在另一个 DataTable 中显示结果。我的源数据表看起来像这样:
DataTable myDataTable = new DataTable();
myDataTable.Columns.Add("OrderID", typeof(int));
myDataTable.Columns.Add("Date", typeof(DateTime));
myDataTable.Columns.Add("UnitsPurchased", typeof(int));
填充后生成的 DataTable 如下所示:
Order ID Date Units Purchased
16548 10/15/09 250
17984 11/03/09 512
20349 01/11/10 213
34872 01/15/10 175
我当前的 LINQ 查询如下所示:
IEnumerable<DataRow> query = (from row in myDataTable.AsEnumerable()
where row.UnitsPurchased > 200
select new
{
row.OrderID,
row.Date,
row.UnitsPurchased
}) as IEnumerable<DataRow>;
resultDataTable.DataSource = query.CopyToDataTable<DataRow>();
每次我运行此代码查询都是空的。我可以看到as IEnumerable<DataRow>
是罪魁祸首,但它对我来说没有任何意义,因为DataTable.AsEnumerable()
返回一个IEnumerable<DataRow>
。任何帮助,将不胜感激。
当您选择 new { } 时,您实际上会得到一个IEnumerable<(Anonymous Type)>
, not IEnumerable<DataRow>
。所以你的as IEnumerable<DataRow>
将返回 null,因为它不能直接转换。
Either select new MyDataRow(constructor using values...)
或做某事,或者只是做var query =...
没有as
投掷。有一个msdn 文章 http://msdn.microsoft.com/en-us/library/bb669096.aspx关于将 CopyToDataTable 与非 DataRow 泛型参数一起使用,虽然我还没有深入阅读它,但选择新的 DataRows 可能是更简单的解决方案。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)