传入Func到LINQ哪里

本文关键字:LINQ 哪里 bool Func 传入 | 更新日期: 2023-09-27 18:09:41

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

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

这是对内存中名为'GetQuestionnaireData()'的IEnumerable集合的查询

然而,从上面的方法签名中,我使用了Expression> predicateFunc。然后我在linq查询的where子句中使用predicateFunc.Compile.

我的问题是:是否有可能在不使用表达式和Delegate .compile的情况下将Func Delegate传递给linq where子句?

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

传入Func<T, bool>到LINQ哪里

当然,只要去掉表达式:

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

可以。可能是您以前没有测试过,或者您的问题中有一些其他的规格,您没有在这里显示。看看这个代码示例:

    static void Main(string[] args)
    {
        Test(i => i > 3);
    }
    static void Test(Func<int, bool> f)
    {
        IEnumerable<int> k = new [] {5, 4, 3, 22,1};
        foreach (var i in k.Where(f))
            Console.WriteLine(i);
    }

希望能有所帮助。