Ваш код:
(foo, xyzzy) => new Foo {
BarId = foo.BarId,
HasXyzzy = xyzzy != null
});
У вас уже есть Foo в качестве параметра, поэтому вы можете изменить делегата, в который вы передаете:
(foo, xyzzy) =>
{
foo.HasXyzzy = xyzzy;
return foo;
});
Исправьте меня, если я ошибаюсь , fooRepository возвращает List<Foo>
, и после левого присоединения вы просто хотите дополнить их дополнительными данными из объединения.
ОБНОВЛЕНИЕ: На самом деле я ошибся, поскольку здесь у нас есть IQueryable, в котором Expression является параметром вместо делегата, и не может преобразовать лямбду с телом оператора в дерево выражений.
Теперь еще одна идея, которая не является лучшей, поскольку она будет использовать дополнительные итерации, но все же - это преобразовать в IEnumerable и выполнить Тот же трюк.
(foo, xyzzy) => new {
foo, xyzzy
}).AsEnumerable()
.Select(x=>
{
foo.HasXyzzy = xyzzy;
return foo;
});