【问题标题】:How to apply Where condition on Umbraco Collection如何在 Umbraco Collection 上申请 Where 条件
【发布时间】:2016-09-07 10:31:23
【问题描述】:

我想在 Umbraco Collection 上应用 where 条件。

代码:

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 是媒体选择器

【问题讨论】:

    标签: umbraco where umbraco7


    【解决方案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 Core Property Value Converters 的包:https://our.umbraco.org/projects/developer-tools/umbraco-core-property-value-converters/,它会自动将一些数据类型值转换为易于访问的对象/列表等。例如媒体选择器值作为 IPublishedContent 模型返回,您可以直接从返回值访问它的属性。

    【讨论】:

    • 虽然我找不到确切的解决方案,但我认为你们俩在概念上都是正确的。
    【解决方案2】:

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

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

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

    而不是

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

    【讨论】:

    • 我什至倾向于更进一步并且也这样做:workCollection.Where(x => x.HasProperty("productImage") && x.HasValue("productImage")) 只是为了确保有时如果您刚刚添加了一个新属性,它可能在重建索引之前不可用,更像是一种带和大括号的方法。
    • 错误:不能使用 lambda 表达式作为动态分派操作的参数,除非先将其转换为委托或表达式树类型
    • 尝试使用 Umbraco.TypedContent 代替 Umbraco.Content
    • var workCollection = Umbraco.TypedContent(workList);我做了这样的更改,仍然得到同样的错误
    • @MarcinZajkowski :我检查了你的答案,我得到了我上面提到的同样的错误。我正在cshtml中尝试这个。有关系吗?
    猜你喜欢
    • 2021-04-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多