如何申请Umbraco Collection的Where条件

时间:2016-09-07 10:31:24

标签: umbraco where umbraco7

我想申请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

2 个答案:

答案 0 :(得分:1)

所以我想你想要做的是从workcollection获取具有填充的projectImage属性的项目?

我个人喜欢用lambda表达式做这个,在你的情况下它会是这样的

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

而不是

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

答案 1 :(得分: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)) { ... }

就个人而言,我更喜欢处理强类型对象,因此另一种解决方案可能是:

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/,它会自动将某些数据类型值转换为易于访问的对象/列表等。媒体选择器值作为 IPublishedContent 模型返回,您可以直接从返回的值访问它的属性。