在加入时包含附加参数
Include with additional param on join
我有很多国家,每个国家我有很多团队。
团队控制器中的 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();
今天收获不错。
首先,我创建了一个新的 class,它将作为 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;
}
我有很多国家,每个国家我有很多团队。
团队控制器中的 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();
今天收获不错。
首先,我创建了一个新的 class,它将作为 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;
}