LINQ - левое соединение с LinqToEntities с использованием POCO в EF4 - PullRequest
0 голосов
/ 15 марта 2011

У меня много проблем с моим JOIN, я не знаю, зависит ли это от EDM или это просто запрос LINQ.

Когда я пытаюсь использовать этот T-SQL в SSMS, он работает какcharm:

выберите g.Id, g.Title, p.Platform_short из игр в качестве g оставленного внешнего объединения.но когда я пытаюсь перевести T-SQL в LINQ, с помощью этого:

Проблема, которую я получаю, заключается в том, что платформа == null

Я пробовал разные подходы, но затем получал дубликаты.

Я застрял с этой проблемой уже пару дней, и я новичок в EF.

var games = (from g in ctx.Games
                         join p in ctx.Platforms
                         on g.Platform.Id equals p.Id
                         select new 
                         {
                             Id = g.Id,
                             Title = g.Title,
                             Platform = g.Platform,                                 
                         });

Вот весь метод:

public ICollection<Game> GetGames()
    {            
        using(xContext ctx = new xContext())
        {                
            ICollection<Game> col = new Collection<Game>();

            var games = (from g in ctx.Games
                         join p in ctx.Platforms
                         on g.Platform.Id equals p.Id
                         select new 
                         {
                             Id = g.Id,
                             Title = g.Title,
                             Platform = g.Platform,                                 
                         });

            foreach (var g in games)
            {
                Game game = new Game();
                game.Id = g.Id;
                game.Title = g.Title;
                game.Platform = g.Platform;                    
                col.Add(game);
            }

            return col;

        }
    }

У моего GamePoco есть свойство Platform и отношения «один-к-одному» в EDM.

Надеюсь, что любой может помочь!

1 Ответ

0 голосов
/ 15 марта 2011

Какова цель вашего левого объединения, когда в результате ничего не установлено из объединенного набора единиц?

Попробуйте:

var games = (from g in ctx.Games
             join p in ctx.Platforms
             on g.Platform.Id equals p.Id into joinTable
             from j in jointTable.DefaultIfEmpty()
             select new 
             {
                 Id = g.Id,
                 Title = g.Title,
                 Platform = j.PlatformShort                                 
             });

Это работает только в EFv4.

...