Linq Присоединяйтесь к .Where (). DefaultIfEmpty () - PullRequest
0 голосов
/ 14 апреля 2020

Начало работы с Linq, и у меня есть запрос, который содержит множество объединений с другими таблицами.

Я не буду помещать весь запрос здесь, так как он не совсем соответствует моему актуальному вопросу.

Мне интересно, какой способ лучше написать мой запрос и почему?

Запрос 1:

var query = from team in context.tblTeams
            join manager in context.tblManagers on team.fkManager equals manager.pkManager into managerJoin
            from manager in managerJoin.DefaultIfEmpty()
            join colour in context.tblTeamColours on team.fkTeamColour equals colour.pkTeamColour into colourJoin
            from colour in colourJoin.DefaultIfEmpty()
            join sponser in context.tblSponsers on team.fkSponser equals sponser.pkSponser into sponserJoin
            from sponser in sponserJoin.DefaultIfEmpty()
            select new TeamView
            {
                pkTeam = team.pkTeam,
                strManager = manager.strManagerName,
                strTeamColour = colour.strColour,
                strSponser = sponser.strSponser
            };

Запрос 2:

var query = from team in context.tblTeams
            from manager in context.tblManagers.Where(x => x.pkManager == team.fkManager).DefaultIfEmpty()
            from colour in context.tblTeamColours.Where(x => x.pkTeamColour == team.fkTeamColour).DefaultIfEmpty()
            from sponser in context.tblSponsers.Where(x => x.pkSponser == team.fkSponser).DefaultIfEmpty()
            select new TeamView
            {
                pkTeam = team.pkTeam,
                strManager = manager.strManagerName,
                strTeamColour = colour.strColour,
                strSponser = sponser.strSponser
            };

Они Кажется, что на выполнение обоих уходит примерно одинаковое время. Мне просто интересно, есть ли разница, кроме читабельности?

С 33 объединениями в полном запросе второй метод кажется мне удобнее и проще для чтения.

В качестве альтернативы, как еще можно написать запрос, который мог бы сделать его быстрее?

...