我们有一个多语言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查询这些语句?
答案 0 :(得分:2)
项目包含特定语言的版本和版本 该项目本身没有语言。
如果您只想要具有上下文语言版本的项目,则需要检查它是否有版本:
var items = item.Children
.Where(i => i.TemplateName == "Brochure")
.Where(i => i.Versions.Count > 0)
.ToList();