这是非常混乱,我使用AsDataView将查询结果绑定到dgv,它可以正常工作如下:
var query = from c in myDatabaseDataSet.Diamond where c.p_Id == p_Id select c; dataGridView1.DataSource = query.AsDataView();
但是,这会导致错误:
var query = from item in myDatabaseDataSet.Items where item.p_Id == p_Id join diamond in myDatabaseDataSet.Diamond on item.p_Id equals diamond.p_Id join category in myDatabaseDataSet.DiamondCategory on diamond.dc_Id equals category.dc_Id select new { Product = item.p_Name,Weight = diamond.d_Weight,Category = category.dc_Name }; dataGridView1.DataSource = query.AsDataView();
错误:
Instance argument: cannot convert from 'System.Collections.Generic.IEnumerable<AnonymousType#1>' to 'System.Data.DataTable'
解决方法
AsDataView的签名如下:
public static DataView AsDataView( this DataTable table )
唯一的参数是DataTable.
您拥有的查询将返回一个匿名类型的IEnumerable,该类型不具有隐式转换到DataTable(或者是DataRow个实例的序列,在这种情况下可以使用它来帮助您创建一个DataTable).
您需要将结果返回到DataTable或您可以转换为DataTable的东西,然后它将工作.
在你的具体情况下,您似乎(或者)使用typed DataSets.如果是这样,那么你应该可以获取所选的值,然后创建新的类型化的DataRow实例(应该有你的工厂方法),然后可以将其放入一个可以调用AsDataView的类型化的DataTable中.