将LINQ查询绑定到DataGridView

前端之家收集整理的这篇文章主要介绍了将LINQ查询绑定到DataGridView前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
这是非常混乱,我使用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不会在查询显示(List).为什么会发生这种情况?那么如何将上面的查询绑定到dgv呢?

解决方法

AsDataView的签名如下:
public static DataView AsDataView(
    this DataTable table
)

唯一的参数是DataTable.

您拥有的查询将返回一个匿名类型的IEnumerable,该类型不具有隐式转换到DataTable(或者是DataRow个实例的序列,在这种情况下可以使用它来帮助您创建一个DataTable).

您需要将结果返回到DataTable或您可以转换为DataTable的东西,然后它将工作.

在你的具体情况下,您似乎(或者)使用typed DataSets.如果是这样,那么你应该可以获取所选的值,然后创建新的类型化的DataRow实例(应该有你的工厂方法),然后可以将其放入一个可以调用AsDataView的类型化的DataTable中.

猜你在找的MsSQL相关文章