Orchardcms 如何按分类术语对项目结果进行分组

Orchardcms 如何按分类术语对项目结果进行分组,orchardcms,Orchardcms,我有一个ContentType动物,它有一个分类领域物种。 请看这篇文章和()以获得一个很好的解释。 我运行了代码,但有两个错误。 1.var speciesField=item.Animal.Species----给出了错误:CS1061,“Orchard.ContentManagement.ContentItem'不包含定义”。 2.var项目=规范字典[speciesTerm]----给定错误:CS0136“无法在此作用域中声明名为'items'的本地或参数,因为该名称在封闭的本地中使用。

我有一个ContentType动物,它有一个分类领域物种。 请看这篇文章和()以获得一个很好的解释。 我运行了代码,但有两个错误。 1.var speciesField=item.Animal.Species----给出了错误:CS1061,“Orchard.ContentManagement.ContentItem'不包含定义”。 2.var项目=规范字典[speciesTerm]----给定错误:CS0136“无法在此作用域中声明名为'items'的本地或参数,因为该名称在封闭的本地中使用。 请帮忙

@using Orchard.ContentManagement
@using Orchard.Taxonomies.Models

@{

    var items = ((IEnumerable<ContentItem>)Model.ContentItems);

    var speciesDictionary = new Dictionary<TermPart, IList<ContentItem>>();


    // Collect categories and their items.
    foreach (var item in items) {

        var speciesField = item.Animal.Species; // Assumes that the species field is attached to the Animal type's implicit part (Animal).
        var speciesTerms = (IEnumerable<TermPart>)speciesField.Terms;

        foreach (var speciesTerm in speciesTerms) {
            var list = speciesDictionary.ContainsKey(speciesTerm) ? speciesDictionary[speciesTerm] : default(IList<ContentItem>);

            if (list == null) {
                list = new List<ContentItem>();
                speciesDictionary.Add(speciesTerm, list);
            }

            list.Add(item);
        }
    }
}
<ul>
    @foreach (var speciesTerm in speciesDictionary.Keys) {
        var items = speciesDictionary[speciesTerm];
        <li>
           @speciesTerm.Name


        </li>
    }
</ul>
使用Orchard.ContentManagement @使用Orchard.Taxonomies.Models @{ var items=((IEnumerable)Model.ContentItems); var speciesdirectionary=新字典(); //收集类别及其项目。 foreach(项目中的var项目){ var speciesField=item.Animal.Species;//假定物种字段附加到动物类型的隐式部分(动物)。 var speciesTerms=(IEnumerable)speciesField.Terms; foreach(var speciesTerm在speciesTerms中){ var list=speciesDictionary.ContainsKey(speciesTerm)?speciesDictionary[speciesTerm]:默认值(IList); if(list==null){ 列表=新列表(); 添加(speciesTerm,列表); } 列表。添加(项目); } } }
    @foreach(speciesDictionary.Keys中的var speciesTerm){ var items=speciesdirectionary[speciesTerm];
  • @物种名称
  • }
  • 您的第一个错误表明您试图获取不存在的
    ContentItem
    类的属性。这实际上是部分正确的,因为它确实存在于ContentItem上,但由于您将其强制转换为ContentItem类,它会丢失动态属性。 您可以通过不强制转换到ContentItem类,而只是转换到dynamic来解决此问题:

    var items = ((IEnumerable<dynamic>)Model.ContentItems);
    
    因此,在底部给它一个不同的名称:

    <ul>
        @foreach (var speciesTerm in speciesDictionary.Keys) {
            // Cannot use 'items' here again
            var speciesItems = speciesDictionary[speciesTerm];
            <li>
               @speciesTerm.Name
            </li>
        }
    </ul>
    
      @foreach(speciesDictionary.Keys中的var speciesTerm){ //无法在此处再次使用“项目” var speciesItems=speciesDictionary[speciesTerm];
    • @物种名称
    • }

  • devqon,对不起!我相信稍后,我会根据您的建议修改代码,它有一个错误:这一行“list.Add(item)”;----给出了错误:“Add”不是定义。我还修改了代码,从到按分类术语对项目结果进行分组,到按标记对项目结果进行分组
    <ul>
        @foreach (var speciesTerm in speciesDictionary.Keys) {
            // Cannot use 'items' here again
            var speciesItems = speciesDictionary[speciesTerm];
            <li>
               @speciesTerm.Name
            </li>
        }
    </ul>