如何投射项目并在 sitecore 中获取选定的项目?
How to cast an item & get selected items inside in sitecore?
大家好,
如果方法不好,谁能提出更好的解决方案,
我有一个包含多个位置的 IEnumerable<Item> locations
。
IEnumerable
中的每一项都包含一个 MultilistField
。
我想 select 物品的 ID(GUID
),
我正在使用类似下面的东西,
locations = locations.Where(x => ((MultilistField)x.Fields["Services"]).GetItems().Where(y => y.ID.Equals(serviceId)));
但它给我错误:
ERROR1: Cannot convert lambda expression to delegate type 'System.Func<Sitecore.Data.Items.Item,bool>'
because some of the return types in the block are not implicitly convertible to the delegate return type
ERROR2: Cannot implicitly convert type 'System.Collections.Generic.IEnumerable<Sitecore.Data.Items.Item>'
to 'bool'
这是一种更简单的方法,可以绕过 MultiListField
对象的转换:
locations = locations.Where(item => item["Services"].Split('|').Contains(serviceId));
我在这里使用了 2 个小快捷方式:
Services
字段值可以作为简单的竖线分隔的 GUID 字符串读取。
- 使用
item["Services"]
而不是 item.Fields["Services"]
将 return
如果没有值或字段不存在,则为空字符串,永远不会为空。
如果你真的想使用更长的版本:
locations = locations.Where(x => ((MultilistField)x.Fields["Services"]).GetItems().Any(y => y.ID.Equals(serviceId)));
注意使用 Any
而不是第二个 Where
。您没有选择 MultiList 项目。您正在检查任何匹配项。
大家好,
如果方法不好,谁能提出更好的解决方案,
我有一个包含多个位置的 IEnumerable<Item> locations
。
IEnumerable
中的每一项都包含一个 MultilistField
。
我想 select 物品的 ID(GUID
),
我正在使用类似下面的东西,
locations = locations.Where(x => ((MultilistField)x.Fields["Services"]).GetItems().Where(y => y.ID.Equals(serviceId)));
但它给我错误:
ERROR1: Cannot convert lambda expression to delegate type
'System.Func<Sitecore.Data.Items.Item,bool>'
because some of the return types in the block are not implicitly convertible to the delegate return typeERROR2: Cannot implicitly convert type
'System.Collections.Generic.IEnumerable<Sitecore.Data.Items.Item>'
to'bool'
这是一种更简单的方法,可以绕过 MultiListField
对象的转换:
locations = locations.Where(item => item["Services"].Split('|').Contains(serviceId));
我在这里使用了 2 个小快捷方式:
Services
字段值可以作为简单的竖线分隔的 GUID 字符串读取。- 使用
item["Services"]
而不是item.Fields["Services"]
将 return 如果没有值或字段不存在,则为空字符串,永远不会为空。
如果你真的想使用更长的版本:
locations = locations.Where(x => ((MultilistField)x.Fields["Services"]).GetItems().Any(y => y.ID.Equals(serviceId)));
注意使用 Any
而不是第二个 Where
。您没有选择 MultiList 项目。您正在检查任何匹配项。