Включить с дополнительным параметром при соединении - PullRequest
0 голосов
/ 14 октября 2018

У меня много наций, и для каждой нации у меня много команд.

Конечная точка 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 и Nation имеет видотбрасывается, и создается новое отношение модели с помощью Translation.

Теперь мне нужно получить тот же 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 выше?

Ответы [ 2 ]

0 голосов
/ 15 октября 2018

Хороший улов tdayi.

Прежде всего я создал новый класс, который будет контейнером результата 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;
    }
0 голосов
/ 15 октября 2018

например:

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