将Func <t,bool =“”>传递给LINQ

时间:2015-08-24 20:28:06

标签: c# linq expression where func

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

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

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

但是从上面的方法签名我使用的是表达式&gt; predicateFunc。然后我在predicateFunc.Compile的linq查询的where子句中使用它。

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

也许这可能是使用@ IEnumerable.Select(somePredicateFunc)吗?

2 个答案:

答案 0 :(得分:5)

当然,只需删除表达式:

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

答案 1 :(得分:2)

是的,你可以。也许是你以前没有经过测试,或者你的问题中还有一些你没有在那里展示的规范。看看这段代码示例:

    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);
    }

希望它有所帮助。