2016-09-07 33 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