如何在实体框架中联接两个或多个表,并在数据网格视图中显示每个表中的选定列
本文关键字:网格 数据网 数据 视图 显示 框架 实体 两个 | 更新日期: 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,...})