C# 如何在实体框架中连接两个或多个表,并在数据网格视图中显示每个表中的选定列
我使用C# 如何在实体框架中连接两个或多个表,并在数据网格视图中显示每个表中的选定列,c#,entity-framework,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
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();
result=(来自my_entity.LANGUAGE中的lang)
在我的国家加入c
关于lang.COUNTRY_ID等于c.ID
选择lang.ToList();
dgvresult.DataSource=结果;
dgvresult.Refresh();
将显示语言表中的所有列,但未显示国家/地区表中的任何列。
我希望在datagrid视图中显示language中的几列和country表中的几列
我该怎么做呢。任何学习链接也非常感谢。
我还想详细了解DataGrid视图。如果有人能推荐好的书籍或材料,请推荐。(…).ToList()
(...).ToList<LANGUAGE>()
.Select(p=>new{p.LanguageProp,p.COUNTRY.COUNTRYProp,...})
.Select(p=>new{p.LanguageProp,p.COUNTRY.COUNTRYProp,…})
您可以创建一个新的匿名类型,然后绑定到它,如下所示:
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();
类似于@pingoo answer,只需一个小编辑: 通过使用源表
语言的导航属性COUNTRY
,您可以在不使用Join
LINQ关键字的情况下执行此操作,如下所示:
result = (from lang in my_entity.LANGUAGE
select new {
lang.Col1,
lang.col2,
lang.COUNTRY.COUNTRY_ID
}).ToList();
dgvresult.DataSource = result; dgvresult.Refresh();`
谢谢你的回答。你能解释一下吗。我有错误。我的函数签名是:public-IList-GetLanguage(FILTER-FILTER,String-param){}如果使用您的解决方案,我会遇到错误。你能解释一下吗?+1因为视图模型的建议。从长远来看,这通常是一个更好的解决方案。如果我将匿名查询包含到函数中,那么函数的返回类型是什么?您可以将其作为System.Object(我认为…)返回,但您确实不应该返回,因为它非常粗糙。如果您想将调用封装在一个方法中,我建议使用强类型视图模型路线。返回类型将是IEnumerable。您也可以不使用Join
LINQ关键字,通过使用源表LANGUAGE
的导航属性COUNTRY
,如下所示:result=(从my_实体中的lang.LANGUAGE选择new{lang.Col1,lang.col2,lang.COUNTRY.COUNTRY_ID}).ToList();dgvresult.DataSource=result;dgvresult.Refresh();
result = (from lang in my_entity.LANGUAGE
select new {
lang.Col1,
lang.col2,
lang.COUNTRY.COUNTRY_ID
}).ToList();
dgvresult.DataSource = result; dgvresult.Refresh();`