Вы не должны преобразовывать тип IQueryable
в IEnumerable
и вызывать Include
, потому что Include
не поддерживается типом IEnumerable
.
Короче говоря, никогда не вызывайте Include после ToList
]
IQueryable = server side call (SQL)
IEnumerable = client side (loaded in memory)
Вот еще один подход, который может немного смущать пользователя функции, потому что ошибка на входе props
. Но он гарантирует, что функция не может быть вызвана, если пересечение не работает.
A & B
в качестве возвращаемого типа всегда должен быть подклассом Props
, так что это не должно быть проблемой (и заставляет компилятор не жаловаться).
export const foo2 = <Props, A, B>(
props: A & B extends Props ? Props : never,
a: A,
b: B,
): A & B => ({ ...a, ...b });
const props = { x: 1, y: 1 };
foo2(props, { x: 1, z: 1 }, { y: 1 }); // Valid
foo2(props, { x: 1 }, {}); // Error
foo2(props, { x: 1, y: 1 }, {}); // Valid
foo2(props, {}, { x: 1, y: 1 }); // Valid