嗨,我有一个简单的存储库层,其方法如下:

public Questionnaire GetQuestionnaire(Expression<Func<Question, bool>> predicateFunc)
    {
        return new Questionnaire
        {
            Title = "Geography Questions",
            Questions = GetQuestionnaireData().Where(predicateFunc.Compile()).ToList()
        };
    }


这是针对名为“ GetQuestionnaireData()”的内存中的IEnumerable集合进行查询

但是,从上述方法签名中,我正在使用Expression> predicateFunc。然后我通过predicateFunc.Compile在linq查询的where子句中使用它。

我的问题是:是否可以在不使用Expression和委托.compiler的情况下将Func委托传递给linq where子句?

也许可以使用@ IEnumerable.Select(somePredicateFunc)吗?

最佳答案

当然,只需删除表达式:

public Questionnaire GetQuestionnaire(Func<Question, bool> predicateFunc)
{
    return new Questionnaire
    {
        Title = "Geography Questions",
        Questions = GetQuestionnaireData().Where(predicateFunc).ToList()
    };
}

07-28 06:38