Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/vb.net/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Dotnetnuke 要按2scx模板中的子实体进行筛选_Dotnetnuke_2sxc - Fatal编程技术网

Dotnetnuke 要按2scx模板中的子实体进行筛选

Dotnetnuke 要按2scx模板中的子实体进行筛选,dotnetnuke,2sxc,Dotnetnuke,2sxc,我有一个名为Awards的列表实体,它的字段是Name(字符串)和YearGiven(实体) 我想展示所有奖项,按年度分组。 即 2017年 ---鲍勃 ---苏 2016年 ---弗雷德 2015年 等 这是我的模板: @using ToSic.SexyContent @functions { // variable which will contain the sorted categories IEnumerable<dynamic> sortedCategor

我有一个名为Awards的列表实体,它的字段是Name(字符串)和YearGiven(实体)

我想展示所有奖项,按年度分组。 即

2017年
---鲍勃
---苏
2016年
---弗雷德
2015年

这是我的模板:

@using ToSic.SexyContent
@functions
{
    // variable which will contain the sorted categories
    IEnumerable<dynamic> sortedCategories;


    // Prepare the data - get all categories through the pipeline
    public override void CustomizeData()
    {
        // get all categories of these questions, then get the distinct entities 
        // this could all be done on 1 line, but it would be harder for people who don't know LINQ yet
        var awardsInThisModule = AsDynamic(App.Data["Awards"].List);
        var categoriesUsed = awardsInThisModule.SelectMany(q => ((List<DynamicEntity>)q.YearGiven));

        var distinctCategories = categoriesUsed.Select(AsEntity).Distinct();    // Distinct only works reliably when cast as entity
        sortedCategories = AsDynamic(distinctCategories).OrderBy(q => q.Year);

    }

}
<link rel="stylesheet" href="@App.Path/assets/awards.css" data-enableoptimizations="true" />

@foreach (var cat in sortedCategories)
        {
           <h3> @cat.Year</h3>
             foreach (var q in AsDynamic(App.Data["Awards"].List).Where(t => t.Name == "Bob").OrderBy(q => q.Name))
            {
                //this works fine and puts Bob against each year


                <h2>@q.Name</h2>

            }

           foreach (var q in AsDynamic(App.Data["Awards"].List).Where(t => t.Year.Select(a => AsDynamic(a).Year) == "2017"))
            {
                //this is what I actually want to do and fails
                <h2>@q.Name</h2>

            }



             <br />
        }
@使用ToSic.SexyContent
@功能
{
//变量,该变量将包含已排序的类别
i可数分类;
//准备数据-通过管道获取所有类别
公共覆盖无效自定义数据()
{
//获取这些问题的所有类别,然后获取不同的实体
//这一切都可以在一条线上完成,但对于那些还不了解LINQ的人来说,这将更加困难
var awardsInThisModule=AsDynamic(应用程序数据[“奖励”]列表);
var categoriesUsed=awardsInThisModule.SelectMany(q=>((列表)q.yeargived));
var distinctCategories=categoriesUsed.Select(AsEntity).Distinct();//Distinct仅在转换为实体时可靠工作
sortedCategories=AsDynamic(distinctCategories)。OrderBy(q=>q.Year);
}
}
@foreach(分类类别中的var cat)
{
@猫年
foreach(AsDynamic中的var q(App.Data[“Awards”].List)。其中(t=>t.Name==“Bob”).OrderBy(q=>q.Name))
{
//这很有效,每年都会让Bob面临挑战
@q、 名字
}
foreach(AsDynamic中的var q(应用程序数据[“奖励”]列表)。其中(t=>t.Year.Select(a=>AsDynamic(a.Year)=“2017”))
{
//这就是我真正想做的,但失败了
@q、 名字
}

}
我首先将Where子句更改为t.YearGiven==2016,但这会导致一个错误“运算符”==“不能应用于“System.Collections.Generic.List”和“int”a类型的操作数”-我假设是因为YearGiven是一个实体,所以实际上是一个列表。
因此,我改为代码中的下一个foreach,得到了这个错误:-
“如果不首先将lambda表达式强制转换为委托或表达式树类型,则无法将其用作动态调度操作的参数。”

我找不到任何模板的例子,做我想做的事,我做的任何工作


注意:我已经在这里硬编码了“2017”以保持简单,但很明显,它每年都会在外部循环中运行。

如果您想调整它,这里有一个简单的示例,具有类似的模式。我基本上是使用一个变量(currCat)来跟踪和处理“类别变化”。希望您可以忽略所有的expando/collapse内容。以下是决赛的情况:


@{
int currCat=0;
int firstCo=851;//磨料
foreach(AsDynamic中的var aCat(应用程序数据[“公司类别])
.Where(c=>c.CategoryActiveYN==true)
.OrderBy(c=>c.CategoryName)
)
{
currCat=aCat.EntityId;
@aCat.CategoryName
    @foreach(AsDynamic中的var vComp(应用程序数据[“公司]) .其中(v=>v.CompanyActiveYN&v.includeonvercards) .OrderBy(v=>v.CompanyName) ) { foreach(公司类别中的var vCat) { 如果(vCat.EntityId==currCat) {
  • @vComp.CompanyName
  • } } }
} }
<div id="vendor-list" role="tablist" class="small">
    @{
        int currCat = 0;
        int firstCo = 851; // Abrasives
        foreach (var aCat in AsDynamic(App.Data["CompanyCategories"])
                .Where(c => c.CategoryActiveYN == true)
                .OrderBy(c => c.CategoryName) 
                )
        {
            currCat = aCat.EntityId;
            <div class="card">
                <div class="card-header" role="tab" id="@string.Format("{0}{1}", "heading", @currCat)">
                    <h5 class="mb-0@((currCat == firstCo) ? "" : " collapsed")" data-toggle="collapse" href="@string.Format("{0}{1}", "#collapse", @currCat)" 
                        aria-expanded="@((currCat == firstCo) ? "true" : "false")" aria-controls="@string.Format("{0}{1}", "collapse", @currCat)">
                        @aCat.CategoryName
                    </h5>
                </div>
                <div id="@string.Format("{0}{1}", "collapse", @currCat)" class="collapse@((currCat==firstCo) ? " show" : "")" role="tabpanel" aria-labelledby="@string.Format("{0}{1}", "heading", @currCat)" data-parent="#accordion" aria-expanded="@((currCat==firstCo) ? "true" : "false")">
                    <div class="card-body">
                        <ul>
                            @foreach (var vComp in AsDynamic(App.Data["Company"])
                        .Where(v => v.CompanyActiveYN && v.IncludeOnVendorCards)
                        .OrderBy(v => v.CompanyName)
                        )
                            {
                                foreach (var vCat in vComp.CompanyCategory)
                                {
                                    if (vCat.EntityId == currCat)
                                    {
                                        <li>@vComp.CompanyName<span></li>
                    }
                }
                            }
                        </ul>
                    </div>
                </div>
            </div>
        }
    }
</div>