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

本文关键字:网格 数据网 数据 视图 显示 框架 实体 两个 | 更新日期: 2023-09-27 17:57:14

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

我的 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();

显示"语言"表中的所有列,但不显示"国家/地区"表中的任何列。我希望在数据网格视图中显示来自语言的几列和国家/地区表中的几列。

我该怎么做。任何学习链接也值得赞赏。我还想详细了解数据网格视图。如果有人能推荐好的书籍或材料,请做。

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

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

 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();
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();

就像@pingoo一个小编辑的答案:

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

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