Я пытаюсь реализовать метод расширения левого внешнего соединения с типом возврата IQueryable
.
Функция, которую я написал, выглядит следующим образом
public static IQueryable<TResult> LeftOuterJoin2<TOuter, TInner, TKey, TResult>(
this IQueryable<TOuter> outer,
IQueryable<TInner> inner,
Func<TOuter, TKey> outerKeySelector,
Func<TInner, TKey> innerKeySelector,
Func<TOuter, TInner, TResult> resultSelector)
{
return
from outerItem in outer
join innerItem in inner on outerKeySelector(outerItem)
equals innerKeySelector(innerItem) into joinedData
from r in joinedData.DefaultIfEmpty()
select resultSelector(outerItem, r);
}
Он не может сгенерировать запрос. Причина может быть: я использовал Func<>
вместо Expression<>
. Я пробовал с помощью Expression<>
. Это дает мне ошибку в строке outerKeySelector(outerItem)
, которая outerKeySelector
является переменной, которая используется как метод
Я нашел несколько дискуссий о SO (например, здесь) и CodeProjects, но они работают для IEnumerable
не для IQueryable
.