我有一个ListView,我使用此查询从名为view_ListaKlientow
的SQL Server视图中填写:
private void fillClientsList() {
using (var context = new EntityBazaCRM()) {
var listaKlientow = from d in context.view_ListaKlientow
select d;
objectListViewListaKlientow.SetObjects(listaKlientow.ToList());
objectListViewListaKlientow.AutoResizeColumns();
}
}
然后,当用户双击ListView中的一行后,我从ID
读取view_ListaKlientow
并使用fillClientGui
填写gui中的必填字段(对于测试,仅包含一个字段) 。
private void objectListViewListaKlientow_DoubleClick(object sender, EventArgs e) {
foreach (view_ListaKlientow user in objectListViewListaKlientow.SelectedObjects) {
int id = user.KlienciID;
fillClientGui(id);
TabPageActivate(tabControlMain, tabPageKlient);
}
}
private void fillClientGui(int klientId) {
using (var context = new EntityBazaCRM()) {
IQueryable<Klienci> klient = context.Kliencis.Include("Podmioty").Where(d => d.KlienciID == klientId);
foreach (var source in klient.ToList()) {
textNIP.Text = source.Podmioty.PodmiotNIP;
}
}
}
现在我想知道,因为我确切地知道我正在查询一个ID我应该只获取特定客户端而不是客户列表所以foreach
来自fillClientGui
只是为了遍历{{1}似乎是额外的不必要的代码。或者这是应该怎么做的?我正在努力学习实体,有些事情我还不清楚:)
答案 0 :(得分:1)
如果您确定从数据库中只返回了一个实例,则在这种情况下可以使用扩展函数FirstOrDefault()
:
var source = context.Kliencis.Include("Podmioty").Where(d => d.KlienciID == klientId).FirstOrDefault();
textNIP.Text = source.Podmioty.PodmiotNIP;