将LINQ查询绑定到DataGridView

将LINQ查询绑定到DataGridView,linq,linq-to-sql,data-binding,datagridview,linq-to-dataset,Linq,Linq To Sql,Data Binding,Datagridview,Linq To Dataset,这非常令人困惑,我使用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

这非常令人困惑,我使用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'
实例参数:无法从转换
“System.Collections.Generic.IEnumerable”到
“System.Data.DataTable”
AsDataView未显示在查询中。(列表)。为什么会这样?那么如何将上述查询绑定到dgv?

的签名如下:

public static DataView AsDataView(
    this DataTable table
)
唯一的参数是

您的查询返回的是匿名类型的,该类型没有到DataTable的隐式转换(或实例序列,在这种情况下,您可以使用它来帮助您创建DataTable)

您需要将结果返回到DataTable或其他可以转换为DataTable的内容中,然后它才能工作


在您的特殊情况下,您似乎正在(或正在)使用。如果是这种情况,那么您应该能够获取所选的值,然后创建新的类型化DataRow实例(应该有适合您的工厂方法),然后将其放入类型化DataTable中,可以调用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
    }.ToList();
dataGridView1.DataSource = query;

谢谢,但我正在寻找一种简单的方法,有些现成的方法不起作用。所以我想我会用SqlCeDataReader来代替它。@DanSogaard:我已经更新了我的答案,以反映您正在使用类型化数据集,以及您可能仍然能够使用AsDataView扩展方法的事实。请查看此链接:也许在这里您可以找到答案: