C#-重构LINQ函数

提问

我如何重构此函数,以便可以使用许多参数?

程序具有很多参数,例如年龄,颜色等.

所以我有这个功能:

public int GetAgesOnProgram(IEnumerable<Program> ProgramList)
{
    return (from x in ProgramList
        where x.Ages.Any()
        select x.Ages).Count();
}

但我也需要这个:

public int GetColorsOnProgram(IEnumerable<Program> ProgramList)
{
    return (from x in ProgramList
        where x.Colors.Any()
        select x.Colors).Count();
}

由于我在Program中有多达10个多对多关系,我想拥有一个可以处理该问题的函数是有意义的吗?

编辑:
我如何返回年龄或颜色列表,而不是像下面这样的整数:

public IEnumerable<Color> GetColorsOnProgram(IEnumerable<Program> ProgramList)
{
    return (from x in ProgramList
        where x.Colors.Any()
        select x.Colors);
}

最佳答案

您可以将功能更改为:

public int GetCountOnProgram(IEnumerable<Program> ProgramList, Func<Program,bool> whereClause)
{
    return ProgramList.Where(whereClause).Count();
}

然后调用:

GetCountOnProgram(programList, x => x.Ages.Any());
评论