Dynamic Content, Linq and Joining on SystemParentId
The rawest version of my problem is this:
var manager = DynamicModuleManager.GetManager();
var foo = from parent
in
manager.GetDataItems(<parent_content_type>)
join child
in
manager.GetDataItems(<child_content_type>)
on parent.Id equals child.SystemParentId
select
new
ProdId = pd.Id, PerfId = pf.Id ;
I need to join my parent types on child types because that's just expected normal run of the mill behavior for any system. My parent type is called production. My child type is called peformance. I created them using Dynamic Module Builder. Your API for getting child items only works for single parent items, so that's not usable; here's my code:
var foo = from pd
in
_productionManager.GetMasters()
join pf
in
_performanceManager.GetMasters() on pd.Id equals pf.SystemParentId
select
new
ProdId = pd.Id, PerfDate = pf.GetValue<DateTime?>(PerformanceFieldNames.DateTime) ;
I created wrappers for DynamicModuleManager and created child classes for each impelmentation of a dynamic content i make. Anyways get masters just looks like this:
public
IQueryable<DynamicContent> GetMasters()
return
DynamicModuleManager.GetDataItems(Type).Where(s => s.Status == ContentLifecycleStatus.Master);
The point is it won't let me join and throws and exception:
No generic method 'Join' on type 'System.Linq.Queryable' is compatible with the supplied type arguments and arguments. No type arguments should be provided if the method is non-generic
My goal here is do nothing fancy, just this:
var foo = from pd
in
_productionManager.GetMasters()
join pf
in
_performanceManager.GetMasters() on pd.Id equals pf.SystemParentId
select
new
ProdId = pd.Id, PerfDate = pf.GetValue<DateTime?>(PerformanceFieldNames.DateTime)
into j1
group j1 by j1.ProdId
into g
select
new
ProdId = g.Key, PerfDateTime = g.Min(q => q.PerfDate) ;
Oh, and I do not want to have to use in-memory list of ids to handle this sort of thing; id rather just use a stored proc or something then.