如何在实体框架中连接两个或多个表,并在数据网格视图中显示每个表的选定列

时间:2014-04-08 10:43:04

标签: c# entity-framework

我使用VS从数据库生成了实体。现在,当我想从我的数据库连接两个表并使用datagrid视图显示结果时。

我的LINQ是:

 result = (from lang in my_entity.LANGUAGE
                              join c in my_entity.COUNTRY
                              on lang.COUNTRY_ID equals c.ID
                              select lang).ToList<LANGUAGE>();

dgvresult.DataSource  =  result;
dgvresult.Refresh();

显示语言表中的所有列,但不显示Country表中的列。 我希望语言中的列很少,而国家表中的几列只能在数据网格视图中显示。

我该怎么做。任何学习链接也不胜感激。 另外,我想详细了解DataGrid View。如果有人可以推荐好书或材料,请做。

4 个答案:

答案 0 :(得分:3)

您可以创建一个新的匿名类型,然后绑定到它,如下所示:

 result = (from lang in my_entity.LANGUAGE
                              join c in my_entity.COUNTRY
                              on lang.COUNTRY_ID equals c.ID
                              select new 
                              { 
                                   lang.Col1,
                                   land.col2,
                                   c.Col1,
                                   c.Col2
                              }).ToList();

dgvresult.DataSource  =  result;
dgvresult.Refresh();

或者您可以创建一个视图模型,只需在其中选择值:

public class LangCountryModel 
{
    public string LangCol1 { get; set; }
    public string LangCol2 { get; set; }
    public string CountryCol1 { get; set; }
    public string CountryCol2 { get; set; }
}

     result = (from lang in my_entity.LANGUAGE
                                  join c in my_entity.COUNTRY
                                  on lang.COUNTRY_ID equals c.ID
                                  select new LangCountryModel 
                                  { 
                                       LangCol1 = lang.Col1,
                                       LangCol2 = land.col2,
                                       CountryCol1 = c.Col1,
                                       CountryCol2 = c.Col2
                                  }).ToList();

答案 1 :(得分:0)

var result = (from ob1 in lista1   
              join ob2 in lista2    
              on ob1.Id equals ob2.Id  
              select new   
                   {  
                        ob1.Age,  
                        ob2.CarName  
                   }).ToList();

dgvresult.DataSource  =  result;  
dgvresult.Refresh();

答案 2 :(得分:0)

与@pingoo答案一样,只需进行少量修改:

通过使用源表Join的导航属性COUNTRY,您可以在不使用LANGUAGE LINQ关键字的情况下执行以下操作:

result = (from lang in my_entity.LANGUAGE
                select new {
                          lang.Col1,
                          lang.col2,
                          lang.COUNTRY.COUNTRY_ID
                          }).ToList();
dgvresult.DataSource = result; dgvresult.Refresh();`

答案 3 :(得分:-1)

(...).ToList<LANGUAGE>()
.Select(p=>new{p.LanguageProp,p.COUNTRY.COUNTRYProp,...})