将Linq绑定到Datagridtextcolumn

时间:2013-04-10 17:55:21

标签: c# wpf linq linq-to-sql

我想从Linq查询中向DatagridText列添加值。

我尝试过:

DataGridTextColumn test = new DataGridTextColumn();
test.Binding = new Binding("test");
dgServer.Columns.Add(test);

dgServer.Items.Add(new Person()
{
  Status = Convert.ToBoolean(from a in db.Persons
          from d in db.PersonDetails
          where a.pID == d.pDID && a.State == "Active" 
          select a)
});

XAML

<DataGridTextColumn x:Name="test" Binding="{Binding}" Header="test"/>

我对上面的代码有例外,说

  

无法将'System.Data.Objects.ObjectQuery`1类型的对象强制转换为'System.IConvertible'。

如何绑定从LINQ到SQL的DatagridTextcolumn绑定。

请帮助

2 个答案:

答案 0 :(得分:0)

这是有问题的代码 -

Status = Convert.ToBoolean(from a in db.Persons
          from d in db.PersonDetails
          where a.pID == d.pDID && a.State == "Active" 
          select a)

内部查询将返回IEnumerable of type Person,您尝试将其转换为Boolean,由于implicit conversion到{{IEnumerable<Person>之内没有Boolean,因此显然无法编译1}}。

答案 1 :(得分:0)

问题是您正在尝试转换linq查询而不是该查询的结果。问题源于Linq的延迟执行模型。尝试在ToBoolean调用的参数中添加'FirstOrDefault()'方法:

Status = Convert.ToBoolean((from a in db.Persons
      from d in db.PersonDetails
      where a.pID == d.pDID && a.State == "Active" 
      select a).FirstOrDefault())

Rohit也有一个好处 - 您需要确保实际上可以从Person类型转换为Boolean