我有这个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上调用自定义方法?我一直在使用扩展方法和表达式,但还没有设法让它工作。有什么指针吗?
我不希望尽可能多地使用表达式树。