Linq查询-创建一个通用子集

本文关键字:一个 子集 查询 创建 Linq | 更新日期: 2023-09-27 18:25:43

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

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

该方法必须能够将筛选器动态应用于该集合,并返回类型为T的新投影,该投影将包含父类的属性子集。我看到了其他关于动态应用过滤器的帖子,但找不到任何关于指定子集的信息(这可能吗,或者我做得不对)。因此,对于subset,调用方将创建一个类,其属性名称和类型将与父Employee类的属性和类型完全匹配,但只包含属性的子集。函数需要能够应用过滤器,然后基于类型T将仅向调用方返回这些属性。

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

Linq查询-创建一个通用子集

不确定这是否是最好的答案,但这个呢:

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库,该库使用约定提供两种类型之间的映射。