2012-02-24 2 views
3

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

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

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

Используя VS 2010, .Net 4.0, C# Спасибо за вашу помощь/время

ответ

2

Не уверен, что это лучший ответ, но как насчет этого:

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 библиотеки , который обеспечивает сопоставление между двумя типами, используя соглашения.

+1

Спасибо за ваш вклад. Я смотрю библиотеку Valueinjecter, и это выглядит многообещающим – RamGopal

Смежные вопросы