общие ограничения класса: 2 типа - PullRequest
1 голос
/ 21 октября 2010

Я хочу создать универсальный класс, который будет принимать T.

T - это объект из Entity Framework, представляющий таблицу или представление этой таблицы.

свойства на обоих будут одинаковыми.

Я хотел бы создать универсальный класс, который будет принимать таблицу или представление, и создать запрос linq на основе свойств.

так что мне нужно сделать что-то вроде .. класс Foo где T: myTable или T: myView

чтобы позже я мог использовать строго типизированные свойства для построения моих предикатов.

Как я мог достичь чего-то подобного?

способ, которым я строю свой запрос, выглядит примерно так:

        if (critera.IsTradeDate)
            predicate = PredicateUtility.And(predicate, t => t.DateTrade >= critera.FromDate);

t - это тип, который должен быть сильным, и используемые свойства будут одинаковыми для таблицы и представления. Так что в этом случае t должен представлять либо мою таблицу, либо мое представление, чтобы повторно использовать код, но при этом использовать структуру сущностей.

1 Ответ

2 голосов
/ 21 октября 2010

Создайте интерфейс ITableOrView (или как-нибудь лучше). Примените интерфейс к обоим частичным классам для ваших сущностей, которые являются таблицей или представлением.

Создайте свой общий класс с where T : ITableOrView

Теперь вы можете использовать типы интерфейсов.

НО вы не можете использовать интерфейсы во многих местах в запросах Entity Framework, поэтому вам действительно нужно делегировать эту работу обратно самому классу 'T'.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...