我如何 select 来自 2sxc 数据流的随机项目?

How can I select a random item from a 2sxc Data stream?

我想在网站的每个页面上显示随机报价。如果我尝试使用 Content,它可以工作,但每个模块都有自己的内容。当我切换到使用数据时,我似乎无法随机 select 列表中的项目。我的内容类型 'Quotation' 只有一个字段,名为 'Quotation'.

这是一个使用内容的测试:

<div>
<h2>@Dnn.Module.ModuleTitle</h2>
<div class="sc-element">Add more items to the list and see which one is selected at random.@Edit.Toolbar(ListContent)</div>
@{
Random rnd = new Random();
int r = rnd.Next(List.Count);
int rp1 = r + 1;
}
<div class="sc-element">Number @rp1, <i>@List[r].Content.Quotation</i>, was selected from this list of @List.Count items: </div>
<ol>
@foreach(var e in List) {
    var Content = e.Content;
    <li class="sc-element">
        @Edit.Toolbar(Content)
        @Content.Quotation
    </li>
}
</ol>

如果我对数据流尝试类似的操作,我无法随机访问列表项。这是代码:

    @using ToSic.Eav.DataSources
<div class="BasicContentWithPreview sc-element">
    @Edit.Toolbar(ListContent)
    <h2><span>Random: @Dnn.Module.ModuleTitle</span></h2>
    @{
        var allQuotes = CreateSource<EntityTypeFilter>();
        allQuotes.TypeName = "Quotation";
    }
    @{
        var ql = allQuotes.List;
        Random rnd = new Random();
        int r = rnd.Next(ql.Count);
        int rp1 = r + 1;
    }
    <div class="sc-element">Number @rp1, <i>@AsDynamic(ql[r].Quotation)</i>, was selected from this list of @ql.Count items: </div>
    <ol>
        @foreach (var q in ql)
        {
            var item = AsDynamic(q.Value);
            <li class="sc-element">[@item.EntityId] @item.Quotation</li>
        }
    </ol>
</div>

错误说:

'ToSic.Eav.IEntity' does not contain a definition for 'Quotation' and no extension method 'Quotation' accepting a first argument of type 'ToSic.Eav.IEntity' could be found

当我删除 ql[r] 部分时,一切正常,底部的列表是完美的。所以我可以按顺序访问列表中的项目,但不能随机访问它们。我试过很多组合。关于如何正确执行此操作的任何想法?谢谢。

从 2sxc 8.10 开始有一个 Shuffle-Data Source - http://2sxc.org/en/blog/post/releasing-2sxc-8-10-public-rest-api-visual-query-and-webapi-shuffle-datasource

您可以在可视查询中使用它,或使用 CreateSource<...> 来使用它。这应该适合你

您还可以使用 LINQ 语句,因为您可以查看随机播放以了解它是如何工作的https://github.com/2sic/eav-server/blob/master/ToSic.Eav.DataSources/Shuffle.cs

希望对您有所帮助,如果是,请标记为已回答:)