【问题标题】:Unable to property copy query to a data table无法将查询属性复制到数据表
【发布时间】:2013-09-06 16:19:58
【问题描述】:

我正在使用这个查询来过滤一些带有groupby "Client" + sum amount 的数据并填充一个数据网格。我在 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”。存在显式转换(您是否缺少演员表?

【问题讨论】:

  • 你遇到了什么错误?这是 C# 吗?
  • 感谢您的快速回复 错误 1 ​​无法将类型 'System.Collections.Generic.IEnumerable' 隐式转换为 'System.Collections.Generic.IEnumerable' .存在显式转换(您是否缺少演员表?)
  • 那么我正在为您添加 C# 标签,如果问题是特定于语言的,如果您添加语言标签,您可能会更快得到答案
  • 非常感谢您的帮助

标签: c# linq filter datatable


【解决方案1】:

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

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

如果您确实需要 DataTable(但同样,您似乎不需要),那么您可以使用 [this other method](无法将类型 'System.Collections.Generic.IEnumerable' 隐式转换为'System.Collections.Generic.IEnumerable'。存在显式转换(您是否缺少转换?)将数据从非数据行源复制到DataTable

【讨论】:

  • 谢谢,我明白了,我已经使用这种语法来尝试 groupBy。我知道如果没有最后一次操作,我确实得到了行。但是问题仍然存在,我怎样才能同时提取行和 groupby 并直接或通过数据表填充到 datagridview 中,任何人都可以提供帮助?
猜你喜欢
  • 2016-03-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-08-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-06-15
相关资源
最近更新 更多