Sitecore数据API,LINQ和语言版本

时间:2014-11-28 12:05:40

标签: linq sitecore

我们有一个多语言Sitecore安装,并且在使用Sitecore项目的LINQ查询时发现了一个小问题。问题是它似乎忽略了LINQ查询中的上下文语言/项目语言版本(即,它返回的语言版本与当前上下文语言不匹配)。

这是两个LINQ查询;两者都没有按预期工作:

        var items = item.Children.Where(i => i.TemplateName == "Brochure")
                    .ToList();

        var items = item.Children.Where(i => i.TemplateName == "Brochure" && i.Language == Sitecore.Context.Language)
                    .ToList();

如果我更改语句以使用Axes和Sitecore查询,它将按预期工作,如果项目没有相应的语言版本,则不会返回项目:

        var items = (item.Axes.SelectItems("./*[@@templatekey='Brochure']") ?? Enumerable.Empty<Item>())
                    .ToList();

有没有人使用LINQ来解决这个问题,或者最好将所有内容转换为Sitecore查询这些语句?

1 个答案:

答案 0 :(得分:2)

项目包含特定语言的版本和版本 该项目本身没有语言。

如果您只想要具有上下文语言版本的项目,则需要检查它是否有版本:

var items = item.Children
    .Where(i => i.TemplateName == "Brochure")
    .Where(i => i.Versions.Count > 0)
    .ToList();