无法将属性复制查询到数据表

时间:2013-09-06 16:19:59

标签: c# linq filter datatable

我正在使用此查询使用groupby“客户端”+总和过滤一些数据并填充数据网格。我在select关键字中收到错误消息。任何想法如何解决这个问题?

这是我正在使用的代码:

IEnumerable<DataRow> query = from p in data.AsEnumerable()           
         where (p.Field<string>("BS") == txtFilterbyBC.Text 
                && p.Field<string>("YEAR") == txtYear.Text
                && p.Field<string>("RM") == txtRM.Text)
                group p by p.Field<string>("Client") into g
                select new
                {
                   Name = g.Key,
                   Total = g.Sum(x => Convert.ToDouble(x.Field<double>("AMOUNT")))
                };

System.Data.DataTable boundTable = query.CopyToDataTable<DataRow>();
dataGridView1.DataSource = boundTable;

错误是:

  

无法将类型'System.Collections.Generic.IEnumerable'隐式转换为'System.Collections.Generic.IEnumerable'。存在显式转换(您是否错过了演员?

1 个答案:

答案 0 :(得分:0)

您正在使用的CopyToDataTable方法旨在获取一系列数据行并将其转换为数据表。如果序列中的项目不是DataRow类型(或更多派生类型),那么它将不起作用,这就是这种情况。

虽然有将数据转换为数据表的方法,但也没有必要。只需将DataGridView直接绑定到您的查询即可。没有必要将它全部包装在DataTable中。这样做只是不必要的努力。

如果你确实需要一个DataTable(但同样,你似乎没有),那么你可以使用[这个其他方法](不能隐式转换类型'System.Collections.Generic.IEnumerable 'to'System.Collections.Generic.IEnumerable'。存在显式转换(您是否缺少演员?)将数据从非数据行源复制到DataTable