用LINQ表达式填充DataGrid

时间:2019-06-15 17:40:16

标签: c#

我无法用以下代码填充数据网格:

var y = valores.Where(c => c % 2 == 0);                 
dataGridView1.DataSource = y.ToList();

但这可行:

var x = from valor in valores
        where (valor % 2 == 0)
        select new
        {
            valor
        };

dataGridView1.DataSource = x.ToList();

2 个答案:

答案 0 :(得分:1)

  

我无法填充数据网格

显然,您的意思是您的dataGridView1未显示该列表。

我转载了您的问题,并针对某些类型进行了实验。看起来原因是当列表包含无属性的对象时,DataGridView不会绑定到列表。例如,在您的第一个代码段中,Linq表达式返回一个整数列表,即System.Int32。而且,如果您使用对象浏览器查看此值类型的定义,那么您会发现它未声明任何公共属性

例如以下代码“也不起作用”

var x = from valor in valores
where (valor % 2 == 0)
select new
{    
};
dataGridView1.DataSource = x.ToList();

也就是说,我正在创建具有没有属性的匿名类型的对象。

System.Int32的{​​{1}}或System.Double的列表也不起作用。

System.Decimal不同的是System.Int32的列表有效,因为System.DateTime具有属性。

因此,我的结论是,如果类型不包含任何属性,则该类型的实例列表将不会绑定到DateTime

答案 1 :(得分:1)

从查询结果中您可能会看到:

enter image description here

您将获得两个不同的列表。第一个返回整数值类型,第二个返回返回值valor,即匿名类型列表。

enter image description here

为了修正第一个查询,您应该从以下位置编辑代码:

var y = valores.Where(c => c % 2 == 0);

var y = valores.Where(c => c % 2 == 0).Select(c => new { valor = c });