你可以试试:
cmbWorkOrder.ItemsSource = (test.ItemsSource as IEnumerable<testTblEntity>)
.Select(t => t.PropertyToDisplayInComboBox);
它返回一个IEnumerable<T>
其中T
是要在组合框中(例如一个string
)显示属性的类型。我期望绑定到test.ItemsSource
将执行查询以从DB中将实体提取到内存中,然后绑定到cmbWorkOrder.ItemsSource
只从内存集合中读取其数据并且不再次访问数据库。虽然我不是。
编辑
也许这是一个有点清洁:
test_DataEntities db = new test_DataEntities();
DataGrid test = new DataGrid();
List<testTblEntity> list = db.testTbls.ToList(); // executes the query
test.ItemsSource = list;
cmbWorkOrder.ItemsSource = list.Select(t => t.PropertyToDisplayInComboBox);
查询的时候居然被执行您现在拥有控制权。在第一个例子中,它将依赖于绑定引擎,当它绑定网格时,以及组合框到您的数据可能取决于XAML中控件的顺序(假设它是WPF)。
其实我只是在争斗了一个小时后才发现它。代码:var query = from a in db.testTbl select a.testColumn; cmbWorkOrder.ItemsSource = query; – user779610
真棒。你给我的代码片段工作!!!!!!非常感谢Slauma – user779610
@ user779610:很好,那也可以。它会发出一个Db查询。如果你将完整的实体加载到你的'test.ItemsSource'中,那么你可以从内存数据中为你的组合框拉出单个列,从而避免第二次DB查询。这是我上面例子中的想法。 – Slauma