我正在检索简单的LINQ查询,但我正在使用ListBox加入两个表和绑定数据。 我无法将项目正确显示到ListBox中。
一旦我删除新项目并选择只使用它的关键字将正常工作,但我想加入两个表,选择新的关键字,它不允许与ListBox绑定数据。 我的代码就像。 这不允许与ListBox绑定。
var newPeople = (from p in clsGeneral.db.Table<SmartFXAttribes>()
join q in clsGeneral.db.Table<CategoryAttribes>() on p.catId equals q.ID
where p.catId == ((SmartFX.CategoryAttribes)((ComboBox)cmbPrintSize).SelectedValue).ID
select new
{
p.ID,
p.ImageHeight,
p.Imageoutline,
p.ImageUnit,
p.ImageWidth,
p.NoofPic,
p.TextboxCaption,
p.CanvasPixelHeight,
p.CanvasPixelWidth,
p.CanvasUnit,
p.catId,
q.FileName
}).ToList();
lstThumbnail.ItemsSource = newPeople;
此代码可以正常使用。
var newPeople =
(from p in clsGeneral.db.Table<SmartFXAttribes>()
join q in clsGeneral.db.Table<CategoryAttribes>() on p.catId equals q.ID
where p.catId == ((SmartFX.CategoryAttribes)((ComboBox)cmbPrintSize).SelectedValue).ID
select p).ToList();
lstThumbnail.ItemsSource = newPeople;
谢谢!
答案 0 :(得分:1)
问题是第一个查询创建了一个匿名类型的对象,但Silverlight无法对匿名类型的对象进行数据绑定(匿名类型是内部的,Silverlight的反射功能不允许从其他程序集访问内部类型)。你的第二个查询返回一个命名类型的对象,所以它可以正常工作。
对此最好的解决方案是声明一个公共类型,其中包含要从第一个查询返回的所有内容的公共属性,并返回该实例。
您可以使用this hack处理它。