2016-09-07 92 views
5

我想申请Umbraco Collection的条件。如何申请条件在Umbraco Collection

代码:

var workList = CurrentPage.work.ToString().Split(new string[] { "," }, StringSplitOptions.RemoveEmptyEntries); 
var workCollection = Umbraco.Content(workList); 
@foreach (var item in workCollection.Where("productImage!=\"\"").Skip((i - 1) * iterationCount).Take(iterationCount)) 

但我总是得到数据,而无需过滤器。
ProductImage是媒体选择 enter image description here enter image description here

回答

1

如果你要坚持动态对象,应该尝试:

var workList = CurrentPage.work.ToString().Split(new string[] { "," }, StringSplitOptions.RemoveEmptyEntries); 
var workCollection = Umbraco.Content(workList); 
@foreach (var item in workCollection.Where("productImage != null && productImage != string.Empty").Skip((i - 1) * iterationCount).Take(iterationCount)) { ... } 

就个人而言,我更喜欢处理强类型的对象,所以anoth er解决方案可能是:

var workList = CurrentPage.work.ToString().Split(new string[] { "," }, StringSplitOptions.RemoveEmptyEntries); 
var workCollection = Umbraco.TypedContent(workList); 
@foreach (IPublishedContent item in workCollection.Where(x => x.HasValue("productImage")).Skip((i - 1) * iterationCount).Take(iterationCount)) { ... } 

欲了解更多信息,请检查:https://our.umbraco.org/documentation/reference/templating/mvc/querying

也可以检查了一个叫做一把umbraco核心属性值转换器https://our.umbraco.org/projects/developer-tools/umbraco-core-property-value-converters/这是自动转换的一些数据类型的值成容易访问的对象/列表等例如媒体选择器值返回为IPublished内容模型,您可以直接从返回的值访问它的属性。

+0

尽管我找不到确切的解决方案,但我认为你们在概念上都是对的。 –

+0

很高兴它的工作! –

1

所以我想你想要做的是得到workcollection有一个充满projectImage属性的项目?

我个人喜欢用lambda表达式来做到这一点,你的情况会是这样的

workCollection.Where(x => x.HasValue("productImage")) 

代替

workCollection.Where("productImage!=\"\"") 
+0

我甚至倾向于进一步,也做:workCollection.Where(x => x.HasProperty(“productImage”)&& x.HasValue(“productImage”))只是为了确保有时如果你刚刚添加一个新的财产,它可能无法使用,直到索引重建,更像是一个皮带和大括号的方法。 –

+0

错误:无法首先将lambda表达式用作动态分派操作的参数,而无需先将其转换为委托或表达式树类型 –

+0

尝试使用Umbraco.TypedContent代替Umbraco.Content – Mark