Entity framework 在联接时包含附加参数

Entity framework 在联接时包含附加参数,entity-framework,linq,ef-core-2.1,Entity Framework,Linq,Ef Core 2.1,我有很多国家,每个国家都有很多球队 team controller中的GetTeam端点检索单个团队及其相关国家。通过LINQ,查询如下: Context.Teams.Include(t => t.Nation).First(t => t.Id.Equals(__id)) 生成的JSON就是我想要的: {"team":{"name":"Team1","nation":{"id":1,"name":"Nation1"}} 现在让我们假设,团队和国家模型中的属性“name”都被删除,

我有很多国家,每个国家都有很多球队

team controller中的GetTeam端点检索单个团队及其相关国家。通过LINQ,查询如下:

Context.Teams.Include(t => t.Nation).First(t => t.Id.Equals(__id))
生成的JSON就是我想要的:

{"team":{"name":"Team1","nation":{"id":1,"name":"Nation1"}}
现在让我们假设,团队和国家模型中的属性“name”都被删除,并且创建了一个新的模型关系,并进行了转换

我现在想要的是检索相同的JSON,但是使用基于区域性的不同查询。 疯狂地理解我如何通过include实现它

如何在LINQ中编写此查询

select * 
from Teams inner join 
Translations TeamTr on Teams.id = TeamTr .id and TeamTr .culture = "IT" inner join 
Nations on Teams.nation_id = Nations.id inner join 
Translations NationTr on Nations .id = NationTr .id and NationTr .culture = "IT"
并将结果数据组合为上面的JSON?

例如:

(from team in Context.Teams
join teamTr in Context.Translations on team.id equals teamTr.id
join nation in Context.Nations on team.nation_id equals nations.id
join nationTr in Context.Translations on nation.id equals nationTr.id
where teamTr.culture == "IT" && nationTr.culture == "IT"
select new 
{
   teamName = team.name,
   nationName = nation.name

}).ToList();
例如:

(from team in Context.Teams
join teamTr in Context.Translations on team.id equals teamTr.id
join nation in Context.Nations on team.nation_id equals nations.id
join nationTr in Context.Translations on nation.id equals nationTr.id
where teamTr.culture == "IT" && nationTr.culture == "IT"
select new 
{
   teamName = team.name,
   nationName = nation.name

}).ToList();
抓到你了

首先,我创建了一个新类,它将是linq结果的容器:

public class TeamDetailLinqDto
{
    public Team Team { get; set; }
    public Translation TeamTranslation { get; set; }
    public Nation Nation { get; set; }
    public Translation NationTranslation { get; set; }
}
这是linq查询:

    public IQueryable<TeamDetailLinqDto> GetTeams()
    {
        var result = from team in Context.Teams
                     join teamTranslation in Context.Translations on
                         new { Id = team.Id, Locale = "IT" }
                         equals new { Id = teamTranslation.EntityId, Locale = teamTranslation.Locale }
                     join nation in Context.Nations on team.NationId equals nation.Id
                     join nationTranslation in Context.Translations on
                         new { Id = nation.Id, Locale = "IT" }
                         equals new { Id = nationTranslation.EntityId, Locale = nationTranslation.Locale }
                     select new TeamDetailLinqDto
                     {
                         Team = team,
                         TeamTranslation = teamTranslation,
                         Nation = nation,
                         NationTranslation = nationTranslation
                     };

        return result;
    }
public IQueryable GetTeams()
{
var result=来自Context.Teams中的团队
在上下文中加入teamTranslation
新建{Id=team.Id,Locale=“IT”}
等于new{Id=teamTranslation.EntityId,Locale=teamTranslation.Locale}
在上下文中加入国家。团队中的国家。国家Id等于国家。Id
在上下文中加入nationTranslation。上的翻译
新建{Id=nation.Id,Locale=“IT”}
等于新的{Id=nationTranslation.EntityId,Locale=nationTranslation.Locale}
选择new TeamDetailLinqDto
{
团队,
团队翻译=团队翻译,
民族,
NationTranslation=NationTranslation
};
返回结果;
}
抓得好

首先,我创建了一个新类,它将是linq结果的容器:

public class TeamDetailLinqDto
{
    public Team Team { get; set; }
    public Translation TeamTranslation { get; set; }
    public Nation Nation { get; set; }
    public Translation NationTranslation { get; set; }
}
这是linq查询:

    public IQueryable<TeamDetailLinqDto> GetTeams()
    {
        var result = from team in Context.Teams
                     join teamTranslation in Context.Translations on
                         new { Id = team.Id, Locale = "IT" }
                         equals new { Id = teamTranslation.EntityId, Locale = teamTranslation.Locale }
                     join nation in Context.Nations on team.NationId equals nation.Id
                     join nationTranslation in Context.Translations on
                         new { Id = nation.Id, Locale = "IT" }
                         equals new { Id = nationTranslation.EntityId, Locale = nationTranslation.Locale }
                     select new TeamDetailLinqDto
                     {
                         Team = team,
                         TeamTranslation = teamTranslation,
                         Nation = nation,
                         NationTranslation = nationTranslation
                     };

        return result;
    }
public IQueryable GetTeams()
{
var result=来自Context.Teams中的团队
在上下文中加入teamTranslation
新建{Id=team.Id,Locale=“IT”}
等于new{Id=teamTranslation.EntityId,Locale=teamTranslation.Locale}
在上下文中加入国家。团队中的国家。国家Id等于国家。Id
在上下文中加入nationTranslation。上的翻译
新建{Id=nation.Id,Locale=“IT”}
等于新的{Id=nationTranslation.EntityId,Locale=nationTranslation.Locale}
选择new TeamDetailLinqDto
{
团队,
团队翻译=团队翻译,
民族,
NationTranslation=NationTranslation
};
返回结果;
}