У меня есть Class / API, который использует источник данных IQueryable<FirstClass>
, однако я хочу предоставить IQueryable<SecondClass>
, где SecondClass
- это класс-оболочка для FirstClass
, который предоставляет почти идентичные свойства, однако по разным причинам это необходимонаследовать от несвязанного базового класса.Например:
// My API
void IQueryable<SecondClass> GetCurrentRecords()
{
return from row in dataSource
/* Linq query */
select new SecondClass(row);
}
// User of my API
var results = GetCurrentRecords().Where(row => row.Owner = "Mike");
Теперь я могу сделать вышеупомянутую компиляцию, просто используя AsQueryable
, однако я хочу выставить "true" IQueryable
, который эффективно запрашивает базу данных на основе запроса пользователей API.
Я знаю, что это не тривиально (моя реализация оболочки IQueryable должна понимать взаимосвязь между свойствами SecondClass
и FirstClass
) и что она не имеет ничего общего с функцией Select
,но это кажется так, как это должно быть возможно.
Как мне это сделать?
Примечание: Я знаю, что вместо этого мой API мог просто выставитьFirstClass
вместе с вспомогательным методом для преобразования FirstClass
в SecondClass
, когда пользователь API "готов" создает свой запрос, но это выглядит грязно, и мне не нравится идея выставлять мои сгенерированные классы таким образом,Кроме того, я бы хотел знать, как это сделать, просто с чисто академической точки зрения.