2011-11-27 154 views
1

我有我从SQL Server视图填充一个ListView名为view_ListaKlientow与此查询:实体框架的使用

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的用户双击一行,我从view_ListaKlientowID和使用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到斯格特列表IQueryable<Klienci>似乎是不必要的额外代码。或者这是应该如何完成的?我试图学习实体,有些东西还不是很清楚:)

回答

1

如果您确定只有一个实例从数据库返回,则可以使用扩展函数FirstOrDefault()在这种情况下:

var source = context.Kliencis.Include("Podmioty").Where(d => d.KlienciID == klientId).FirstOrDefault(); 
textNIP.Text = source.Podmioty.PodmiotNIP; 
+0

很好。谢谢。 – MadBoy

+0

不客气。 –