У меня есть два расширения:
public static IQueryable<T> Existing<T>(this IQueryable<T> qry)
where T : class, IDeletable
{
return qry.Where(...);
}
public static IEnumerable<T> Existing<T>(this IEnumerable<T> qry)
where T : class, IDeletable
{
return qry.Where(...);
}
Как мне объединить эти два метода в один метод? Я попробовал следующее:
public static TU Existing<TU, T>(this TU qry)
where TU : class, IQueryable<T>, IEnumerable<T>
where T : class, IDeletable
{
return (TU)qry.Where(...);
}
Но это не работает, потому что тип не может быть выведен правильно (потому что IQueryable наследуется от IEnumerable, я думаю). Более того, T
не всегда IQueryable
, что также является проблемой здесь (вопрос: если я укажу несколько интерфейсов в предложении where, разве они не сопоставляются дизъюнктивным образом?). В предыдущем случае IQuerable
был использован, если он подходит, или же IEnumerable
. Как я могу обойти это?