在局部视图宏中,我尝试获取包含名为" breakInheritance"的属性的第一个祖先或自身节点。并且值为True
。我一直在攻击这个声明/查询大约一个小时,同时在SO和Our.Umbraco论坛上打猎,但我担心我没有到达任何地方。我觉得这应该是非常直接的。
查询
var nodeToUse = CurrentPage.AncestorOrSelf(x => (x.HasProperty("breakInheritance") && x.GetPropertyValue<bool>("breakInheritance")));
lambda表达式用红色下划线表示 - Cannot use a lambda expression as an argument to a dynamically dispatched operation without first casting it to a delegate or expression tree type
我发现这个错误有很多资源,但在我见过的所有情况下,他们可以编辑的某些自定义扩展方法,所以它没有&#39;我真的帮了我太多。
答案 0 :(得分:3)
我说最好不要将strongly typed API与dynamic API混在一起。在您的代码中,您可以执行CurrentPage.AncestorsOrSelf
或Model.Content.AncestorsOrSelf()
,第一个示例显然不接受lambda表达式,如错误消息所示。
请尝试以下方法:
var node = Model.Content.AncestorsOrSelf()
.FirstOrDefault(n => n.HasProperty("breakInheritance") &&
n.GetPropertyValue<bool>("breakInheritance"))
答案 1 :(得分:0)
通过将AncestorsOrSelf方法强制转换为IEnumerable<IPublishedContent>
var nodeToUse = ((IEnumerable<IPublishedContent>)CurrentPage
.AncestorsOrSelf())
.Where(x => (x.HasProperty("breakInheritance") && x.GetPropertyValue<bool>("breakInheritance") && x.HasValue("widgets")))
.FirstOrDefault();