在IQueryable上调用自定义过滤方法

时间:2017-11-20 09:07:52

标签: linq iqueryable

我有这个linq查询(使用linq 4.3.0):

return ExecuteODataQuery(Db.AdvisorFees, f => f.Advisor);

实施如下:

protected IQueryable<TType> ExecuteODataQuery<TType>(IQueryable<TType> queryFunc, Func<TType, Advisor> advisorFunc) where TType : Entity
    {
        var systemAccount = GetSystemAccountThrow();

        var results = queryFunc.Where(x => x.Active).AsEnumerable().Where(x => CheckAdvisorOrChannel(systemAccount, advisorFunc(x)));

        return results;
    }

这是我的自定义方法:

        public static bool CheckAdvisorOrChannel(SystemAccount systemAccount, Advisor advisor)
    {
        return (systemAccount.IsChannelSystemAccount ? systemAccount.Channel.Code == advisor.Channel.Code : systemAccount.Advisor.Code == advisor.Code);
    }

目前有效。如果我删除AsEnumerable(),我的自定义方法会得到LinqToEntities不支持的异常。我不能使用AsEnumerable(),因为我有太多的记录,并且不想在内存中进行剩余的过滤。是否可以在IQueryable上调用自定义方法?我一直在使用扩展方法和表达式,但还没有设法让它工作。有什么指针吗?

我不希望尽可能多地使用表达式树。

0 个答案:

没有答案