Делегат действия с общим параметром - PullRequest
1 голос
/ 04 февраля 2012

Есть код:

using (var ctx = new testDataContext())
        {
            var options = new DataLoadOptions();
            options.LoadWith<TableA>(p => p.TableB);
            ...
            var tmp = ctx.TableA.Where(p => p.TableB != null);
            ...
        }

Хочется обернуть его так:

Action<T> test = x => {
    using (var ctx = new testDataContext())
        {
            var options = new DataLoadOptions();
            options.LoadWith<TableA>(p => typeof(x));
            ...
            var tmp = ctx.TableA.Where(p => p.GetType().GetProperty(x) != null);
            ...
        }
}
test(TableB);
test(TableC);

Или что-то в этом роде.

Идея состоит в том, чтобы использовать один и тот же метод для различных таблиц, которые передаются в качестве параметра некоторой функции.

Я знаю о наследовании linq2sql, но хочу знать, можно ли сделать по-другому?

Ответы [ 2 ]

0 голосов
/ 05 февраля 2012

Если конкретное свойство / свойства, которые вы собираетесь проверять, имеют фиксированное число и известны во время компиляции, то добавление определенного интерфейса для этих таблиц (через частичный класс, я бы предположил), вероятно, было бы самым простым и все еще типизированным. -безопасный. В противном случае, вы смотрите на отражение, или используете динамический, или, возможно, используете Dynamic LINQ в зависимости от целей.

Может помочь более конкретный пример, так как мне не ясно, хотите ли вы взять определенные таблицы, которые соответствуют шаблону, или любую таблицу, несмотря ни на что.

0 голосов
/ 04 февраля 2012

Если вы можете ввести общий интерфейс для таблиц - вы можете написать функцию \ делегат с параметром типа этого интерфейса и передать каждую таблицу в качестве этого параметра.

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