internal static void SetListChildResults <Parent>(List <Parent> parents, ModelDefinition modelDef, FieldDefinition fieldDef, Type refType, IList childResults, FieldDefinition refField) { var map = new Dictionary <object, List <object> >(); List <object> refValues; foreach (var result in childResults) { var refValue = refField.GetValue(result); if (!map.TryGetValue(refValue, out refValues)) { map[refValue] = refValues = new List <object>(); } refValues.Add(result); } var untypedApi = refType.CreateTypedApi(); foreach (var result in parents) { var pkValue = modelDef.PrimaryKey.GetValue(result); if (map.TryGetValue(pkValue, out refValues)) { var castResults = untypedApi.Cast(refValues); fieldDef.SetValue(result, castResults); } } }
internal static void SetRefSelfChildResults <Parent>(List <Parent> parents, FieldDefinition fieldDef, ModelDefinition refModelDef, FieldDefinition refSelf, IList childResults) { var map = new Dictionary <object, object>(); foreach (var result in childResults) { var pkValue = refModelDef.PrimaryKey.GetValue(result); map[pkValue] = result; } foreach (var result in parents) { var fkValue = refSelf.GetValue(result); if (fkValue != null && map.TryGetValue(fkValue, out var childResult)) { fieldDef.SetValue(result, childResult); } } }
internal static void SetRefFieldChildResults <Parent>(List <Parent> parents, ModelDefinition modelDef, FieldDefinition fieldDef, FieldDefinition refField, IList childResults) { var map = new Dictionary <object, object>(); foreach (var result in childResults) { var refValue = refField.GetValue(result); map[refValue] = result; } foreach (var result in parents) { var pkValue = modelDef.PrimaryKey.GetValue(result); if (map.TryGetValue(pkValue, out var childResult)) { fieldDef.SetValue(result, childResult); } } }