Linq-запрос к Linq лямбда EF Core JoinC#

Место общения программистов C#
Anonymous
Linq-запрос к Linq лямбда EF Core Join

Сообщение Anonymous »

Я пытаюсь выполнить левое соединение в EF Core с помощью Linq Lambda.
Я нашел нужный мне код, который работает в формате запроса Linq, но я предпочитаю использовать Lambda запрос.

Код: Выделить всё

public class PlayerWithOverride
{
public Player Player { get; set; }
public PlayerOverride PlayerDataOverride{ get; set; }

}

Код: Выделить всё

var query = from b in ctx.Players
join p in ctx.PlayerOverrides
on b.PlayerId equals p.PlayerId into grouping
from p in grouping.DefaultIfEmpty() where b.PlayerId == 2706
select new PlayerWithOverride() { Player = b, PlayerDataOverride= p };

var res = query.FirstOrDefault(); // Correctly return a row even when there is no match in sub table.

Вышеупомянутое работает правильно. Он вернет игрока, и если в таблице PlayerOverrides есть соответствующее переопределение, он добавит его в PlayerDataWithOverride, в противном случае PlayerDataWithOverride будет иметь значение null. Итак, он выполняет левое соединение.

Код: Выделить всё

var test = ctx.Players.Where(o => o.PlayerId == 2706).Join(
ctx.PlayerOverrides.DefaultIfEmpty(),
p => p.PlayerId,
e => e.PlayerId,
(p, e) => new PlayerWithOverride()
{
Player = p,
PlayerDataOverride = e

});

var pl = test.FirstOrDefault(); // null when both rows don't match

При попытке сделать то же самое в Lambda (см. выше) выполняется внутреннее соединение, в результате чего он возвращает что-либо только в том случае, если есть результат из обеих таблиц.
Какой правильный перевод Lambda для версии запроса?

Подробнее здесь: https://stackoverflow.com/questions/790 ... -core-join

Вернуться в «C#»