Linq查询 - 创建通用子集

时间:2012-02-24 04:23:09

标签: c# linq generics methods

我正在尝试设计一个通用方法,该方法处理一个说员工的集合。员工类有大约5到10个属性。我希望能够传递一个过滤器并返回一个(通用的)集合类EmployeeSummary,其中包含Employee类的一些属性。

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

该方法必须能够将过滤器动态应用于此集合,并返回类型为T的新投影,该投影将包含父类的属性子集。我看到关于动态应用过滤器的其他帖子,但无法找到有关指定子集的任何信息(甚至是可能的,或者我是以错误的方式进行此操作)。因此,对于子集,调用者将创建一个类,其属性 - 名称和类型将与父Employee类完全匹配,但仅包含属性的子集。该函数需要能够应用过滤器然后根据类型T将只返回那些属性给调用者。

使用VS 2010,.Net 4.0,C# 感谢您的帮助/时间

1 个答案:

答案 0 :(得分: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库,它使用约定提供两种类型之间的映射。