这似乎应该很容易。也许是,我只是在思考它。我有一堆通过DropLink设置了类别字段的项目。我想抓住所有与这些选项之一匹配的项目。例如,获取Category = Brochure的所有项目的列表。我似乎无法获得Droplink选项的ID以匹配Item本身的Category选项。
编辑:按要求包含当前代码。
public List<PoolDownload> Manuals
{
get
{
LookupField cat = (LookupField)this.Item.Fields["Category"];
return this.Downloads.Where(i => (i.Item.TemplateID == PoolDownload.TemplateId) &&
(i.Item.GlassCast<Pdp.Pool.Website.Business.Entities.PoolDownload>().Category.ToString() == cat.TargetID.ToString()))
.ToList();
}
}
答案 0 :(得分:1)
我认为问题在于您将Guid.ToString()
与Sitecore.Data.ID.ToString()
进行比较。这两个语句返回不同的值:
var guidToString = Sitecore.Context.Item.ID.Guid.ToString();
// "2a6a1d9a-be1d-411b-821a-7e63775280b3"
var idToString = Sitecore.Context.Item.ID.ToString();
// "{2A6A1D9A-BE1D-411B-821A-7E63775280B3}"
同时将TargetID
投放到Guid
,你应该很好。
并在下面的评论中回答您关于显示&#34;下载项目&#34;按类别分组,您可以使用GroupBy方法https://msdn.microsoft.com/en-us/library/bb534304(v=vs.110).aspx,如下所示:
public IEnumerable<IGrouping<Guid, PoolDownload>> Manuals
{
get
{
LookupField cat = (LookupField)this.Item.Fields["Category"];
return this.Downloads.Where(i =>
i.Item.TemplateID == PoolDownload.TemplateId
&& i.Item.GlassCast<Pdp.Pool.Website.Business.Entities.PoolDownload>().Category.ToString() == cat.TargetID.Guid.ToString())
.GroupBy(i => i.Category);
}
}
然后,要在新的Manuals属性中循环结果,您可以执行以下操作:
foreach(var categoryGroup in Manuals)
{
var categoryGuid = categoryGroup.Key;
foreach(var download in categoryGroup)
{
var downloadInCurrentGroup = download.Item;
}
}