Linq Query - Создание общего подмножества - PullRequest
3 голосов
/ 24 февраля 2012

Я пытаюсь разработать универсальный метод, метод имеет дело с набором, скажем, сотрудников.Класс сотрудников имеет от 5 до 10 атрибутов.Я хочу иметь возможность передать фильтр и получить (универсальный) класс коллекции EmployeeSummary с некоторыми атрибутами класса Employee.

public T GetFilteredSubset<T>(Somecollection employeeList, filter)

Метод должен иметь возможность динамически применять фильтр кэта коллекция и возвращает обратно новую проекцию типа T, которая будет содержать подмножество атрибутов родительского класса.Я вижу другой пост о динамическом применении фильтров, но не могу найти какую-либо информацию об указании подмножества (это вообще возможно или я поступаю неправильно).Таким образом, для подмножества вызывающая сторона создаст класс, чьи атрибуты - name и type будут точно соответствовать атрибутам родительского класса Employee, но содержат только подмножество атрибутов.Функция должна быть в состоянии применить фильтр, тогда на основе типа T будет возвращаться только те атрибуты для вызывающего.

1 Ответ

2 голосов
/ 24 февраля 2012

Не уверен, что это лучший ответ, но что об этом:

public static IEnumerable<TSelect> 
           GetFilteredSubset<TEntity, TSelect>(IEnumerable<TEntity> collection,
                                               Func<TEntity, bool> filter)
        where TSelect : class, new()
    {
        IEnumerable<TSelect> result = collection.Where(filter)
            .Select(s => new TSelect().InjectFrom(s))
            .Cast<TSelect>();

        return result;
    }

InjectFrom из библиотеки ValueInjecter , которая обеспечивает сопоставление между двумя типами с использованием соглашений.

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