Как выполнить левое внешнее соединение с предложением where, используя методы расширения лямбда-выражений linq - PullRequest
0 голосов
/ 27 июня 2019

У меня есть следующий код в sql, и я хочу сделать лямбда-запрос linq.Есть ли способ добиться этого?

SELECT *
FROM dbo.Idea i
    LEFT OUTER JOIN dbo.IdeaCollaborator ic
        ON ic.Idea_Id = i.Id
WHERE i.Submitter_Id = 'Peter'
      OR ic.User_Id = 'Peter';

Я беру ссылку на Как выполнить левое внешнее объединение с использованием методов расширения linq

и получить

db.Ideas
 .GroupJoin(
   db.IdeaCollaborators,
   i => i.Id,
   ic => ic.Idea_Id,
   (x, y) => new { Ideas = x, IdeaCollaborators = y })
 .SelectMany(
   x => x.IdeaCollaborators.DefaultIfEmpty(),
   (x, y) => new
   { x.Ideas.Id, x.Ideas.IdeaStatus_Id, y.User_Id}
 )

Но я застрял

1 Ответ

0 голосов
/ 27 июня 2019

Ответом было использование .FirstOrDefault () в отношении где, потому что в отношении FirstOrDefault взять тот же элемент, который мы собираемся взять из выбора, так работает для предложения where

db.Ideas
 .GroupJoin(
  db.IdeaCollaborators,
  i => i.Id,
  ic => ic.Idea_Id,
  (x, y) => new { Ideas = x, IdeaCollaborators = y })
 .Where(gj => gj.Ideas.Submitter_Id == "Peter" | gj.IdeaCollaborators.FirstOrDefault().User_Id == "Peter")
 .SelectMany(
  x => x.IdeaCollaborators.DefaultIfEmpty(),
  (x, y) => new
  { x.Ideas.Id, x.Ideas.IdeaStatus_Id, y.User_Id })
);
...