我正在使用此查询使用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'。存在显式转换(您是否错过了演员?
答案 0 :(得分:0)
您正在使用的CopyToDataTable
方法旨在获取一系列数据行并将其转换为数据表。如果序列中的项目不是DataRow
类型(或更多派生类型),那么它将不起作用,这就是这种情况。
虽然有将数据转换为数据表的方法,但也没有必要。只需将DataGridView
直接绑定到您的查询即可。没有必要将它全部包装在DataTable中。这样做只是不必要的努力。
如果你确实需要一个DataTable
(但同样,你似乎没有),那么你可以使用[这个其他方法](不能隐式转换类型'System.Collections.Generic.IEnumerable 'to'System.Collections.Generic.IEnumerable'。存在显式转换(您是否缺少演员?)将数据从非数据行源复制到DataTable
。