public DynamicModels Execute(dynamic options, DynamicRepository repository, string associationName, string selectClause, IEnumerable<dynamic> models, string parentMemberName) { if (ShouldDiscardCache(options)) Cache = null; if (Cache != null) return Cache; var many = repository.Query(selectClause).ToList(); foreach (var item in many) { var model = models.First(s => s.Id == item.GetMember(parentMemberName)); item.SetMember(model.GetType().Name, model); } foreach (var model in models) { var assocation = model.AssociationNamed(associationName); var relatedTo = many.Where(s => s.GetMember(model.GetType().Name).Equals(model)).Select(s => s); assocation.EagerLoadMany.Cache = new DynamicModels(relatedTo); assocation.AddNewAssociationMethod(assocation.EagerLoadMany.Cache, model); } return new DynamicModels(many); }
public static DynamicModels Execute(IEnumerable<dynamic> models, DynamicRepository repository, string associationName, string sql, Func<dynamic, dynamic, bool> findClause) { var belongsResult = new List<dynamic>(repository.Query(sql)); foreach (var item in belongsResult) { var relatedModels = models.Where(s => findClause(item, s)); foreach (var relateModel in relatedModels) { var association = relateModel.AssociationNamed(associationName); association.Model = item; var propName = relateModel.GetType().Name; if (item.RespondsTo(propName)) { ConvertToList(propName, item); item.GetMember(propName).Add(relateModel); } else { item.SetMember(propName, relateModel); } } } return new DynamicModels(belongsResult); }