Dynamic Content, Linq and Joining on SystemParentId

Posted by Community Admin on 04-Aug-2018 19:57

Dynamic Content, Linq and Joining on SystemParentId

All Replies

Posted by Community Admin on 18-Jul-2015 00:00

Gist Playground

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.

 

This thread is closed