我第一次没有设法找到我的问题的现有答案。
基本上我有一个通用表达式来允许过滤 IQueryable 使用的活动项目:
queryableGoesHere.ActiveAtItems(x => x.StartDate, x => x.EndDate, asAtDate, true)
表达式的实现:
public static Expression<Func<T, Func<T, DateTime>, Func<T, DateTime?>, DateTime?, bool?, bool>> GetActiveAtItemsExprGeneric<T>()
where T : class
{
return (o, from, to, givenTime, isActive) => (!to(o).HasValue);
}
我已经简化了返回线以突出问题。它一直有效,直到我尝试使用这两个函数中的任何一个,在本例中为“to(o)”。
在此处使用 linqkit 时失败:
return (from m in source.AsExpandable()
where predicate.Invoke(m, arg1, arg2, arg3, arg4)
select m);
除了“附加信息:无法将‘System.Linq.Expressions.TypedParameterExpression’类型的对象转换为‘System.Linq.Expressions.LambdaExpression’类型。”
现在我从来没有以这种方式传递一个函数并在表达式中使用它,我的 google-fu 也没有找到对这个异常的任何引用。我不确定我正在做的事情是否可能......任何帮助将不胜感激!