Преобразование Join в GROUP JOIN при использовании лямбда-выражения в linq c # - PullRequest
0 голосов
/ 21 мая 2018

Я пытаюсь изменить соединение на левое внешнее соединение, но получаю всевозможные ошибки преобразования.Ниже мое текущее объединение, кто-нибудь может дать какие-либо предложения о том, как это сделать, не изменяя фактическую логику этого объединения?

 BRAND_NAME_MAP_MASTER objBrandNameMap = DB.PFC_MAP_MASTERs.Join(
          DB.BRAND_NAME_MAPs,
          a => a.BRAND_NAME_MAP_ID, b => b.BRAND_NAME_MAP_ID,
    (a, b) => new { a, b }).Where(x => x.a.BRAND_NAME_MAP_ID == BrandNameMapID && 
        x.b.BRAND_NAME_MAP_ID == BrandNameMapID).Select(x => x.a).FirstOrDefault();

Ответы [ 3 ]

0 голосов
/ 22 мая 2018

Вы должны использовать ответ NetMage, если это весь ваш запрос.Но, если вам все еще нужно сделать левое внешнее соединение, используйте это:

BRAND_NAME_MAP_MASTER objBrandNameMap = DB.PFC_MAP_MASTERs.GroupJoin(
          DB.BRAND_NAME_MAPs,
          a => a.BRAND_NAME_MAP_ID, 
          b => b.BRAND_NAME_MAP_ID,
          (a, b) => new { a, b })
          .SelectMany(
          x => x.b.DefaultIfEmpty(),
          (x,y) => new { x.a, y})
.Where(x => x.a.BRAND_NAME_MAP_ID == BrandNameMapID)
.Select(x => x.a).FirstOrDefault();
0 голосов
/ 22 мая 2018

Ваши намерения не имеют смысла, так как вы только получаете.Если вы только хотите, тогда нет необходимости в левом присоединении.Хотя я написал запрос, который даст вам результат левого соединения.Вы можете использовать его так, как вы хотите.

BRAND_NAME_MAP_MASTER objBrandNameMap = 
    (from Master in DB.PFC_MAP_MASTERs.Where(x=>x.BRAND_NAME_MAP_ID ==BrandNameMapID)
     join Map in DB.BRAND_NAME_MAPs.Where(z=>z.BRAND_NAME_MAP_ID ==BrandNameMapID)
     on Master.BRAND_NAME_MAP_ID equals Map.BRAND_NAME_MAP_ID
     into result
     from res in result.DefaultIfEmpty()
     select new {Master,res}).ToLisT()

Надеюсь, это поможет.

0 голосов
/ 22 мая 2018

Поскольку вы сохраняете только a, в конце концов переход к левому объединению означает, что все равно, совпадает ли b или нет, поэтому результат просто:

BRAND_NAME_MAP_MASTER objBrandNameMap = DB.PFC_MAP_MASTERs
                                          .Where(a => a.BRAND_NAME_MAP_ID == BrandNameMapID)
                                          .FirstOrDefault();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...