我手动创建等效的lambda:
var function = p => p.Child.Any(c => c.Field == "value");
我有一个MethodInfo引用,用于与代码内置的表达式一起使用的“Any”方法。
MethodInfo method = typeof(Queryable).GetMethods()
.Where(m => m.Name == "Any" && m.GetParameters().Length == 2)
.Single().MakeGenericMethod(typeof(Child));
我的实体是: 家长1 --- *孩子
Child是Parent上的导航属性(上面的lambda中的p)。属性的类型是由设计者创建的EntityCollection。
我一直在寻找引用Any方法来创建该调用的正确方法。 Marc给了我如何在这里得到答案的答案:Calling a Method from an Expression
但它不适用于实体框架。 EntityCollection不实现IQueryable,因此应如何引用Any方法。
答案 0 :(得分:3)
EntityCollection<T>
没有实现IQueryable<T>
因此,这不起作用,IMO就不足为奇了。
你能否解释一下你想要做什么?如果您希望在数据库上运行查询,我的猜测是它真的不会支持(假设EntityCollection<T>
没有实现IQueryable<T>
)。如果您希望在本地运行查询,则应使用Enumerable.Any而不是Queryably.Any。
EntityCollection<T>
答案 1 :(得分:0)
您可以使用AsQueryable()扩展方法将EntityCollection强制转换为IQueryable。