简化型号:
public class GolfCourseDetailsPart : ContentPart<GolfCourseDetailsRecord>
{
public bool ShowInHomePage {... //Get and Set using Retrieve and Store methods
}
简化迁移:
ContentDefinitionManager.AlterTypeDefinition("GolfCourse", gc => gc
//...
.WithPart(typeof(GolfCourseDetailsPart).Name)
);
我需要过滤“GolfCourse”类型的所有项目,才能获得将ShowInHomePage设置为 true 的项目。
过滤
我创建了一个实现IFilterProvider接口的过滤器,它返回所有的GolfCourse内容项,但我还是无法通过ShowInHomePage进行过滤:
private void ApplyFilter(FilterContext context)
{
context.Query = context.Query.Join(x=>x.ContentPartRecord(typeof(GolfCourseDetailsRecord)));
}
如何通过属性ShowInHomePage ??
进行过滤答案 0 :(得分:2)
你几乎就在那里,唯一缺少的是.Where
条款。在HQL查询中,它看起来像这样:
private void ApplyFilter(FilterContext context)
{
context.Query = context
.Query
.Join(x => x.ContentPartRecord(typeof(GolfCourseDetailsRecord)))
.Where(x => x.ContentPartRecord<GolfCourseDetailsRecord>(), g => g.Eq("ShowInHomePage", true));
}
答案 1 :(得分:1)
您是否有任何理由要创建IFilterProvider? 这些仅在您希望为查询投影提供自定义过滤器时才有用。
如果您只是想以编程方式获取过滤数据,那么我将使用ContentManager的Query方法。
以下是有关如何查询Orchard的一组示例,我认为它对您来说比我只需将您需要的查询放在此处更有用:https://orchardtrainingdemo.codeplex.com/SourceControl/latest#Controllers/ContentsAdminController.cs