Hi Ian,
Yes, you are able to do relations in code. I am doing this successfully in VB.NET 2.0.
For example, here I am successfully using a TypedList as a starting point, and modifying it directly in code by adding relations, filters, etc.
Hope this helps!
Ryan
'TypedList we will modify
Dim myTypedList As New ReportYtdsummaryByGroupTypedList
'Create a New Query based on the TypedList above
Dim myQuery As New TypedListDAO
Dim myFields As ResultsetFields = myTypedList.BuildResultset
Dim myRelations As RelationCollection = myTypedList.BuildRelationSet
Dim myDataTable As New DataTable
myDataTable.TableName = myTypedList.TableName
Dim myFilter As New PredicateExpression
Dim mySort As New SortExpression
'Special Relations
'-----------------------------------------------------------------------------------------------------
'Special Relation - FixedCostType
myRelations.Add(FixedCostEntity.Relations.FixedCostTypeEntityUsingFixedCostTypeId, JoinHint.Left)
'Special Relation - Join on Fixed Costs (Multiple Relations to one table)
Dim myFixedCostRelation As IEntityRelation = New EntityRelation(RelationType.OneToMany, True)
myFixedCostRelation.AddEntityFieldPair(PlanFields.BenefitId, FixedCostFields.BenefitId)
myRelations.Add(myFixedCostRelation, JoinHint.Left)
'Additional Fields
'-----------------------------------------------------------------------------------------------------
'Define Field for Special Fixed Costs
Dim myFieldCount As Integer = myFields.Count - 1
myFields.Expand(8)
myFields.DefineField(ContractTierFields.SortOrder, myFieldCount + 1, "TierSortID") 'ContractTier Sort ID
myFields.DefineField(FixedCostFields.Id, myFieldCount + 2, "FixedCostID") 'Fixed Cost ID
myFields.DefineField(FixedCostFields.AmountPepm, myFieldCount + 3, "FixedCostAmountPEPM") 'Fixed Cost PEPM
myFields.DefineField(FixedCostFields.TierId, myFieldCount + 4, "FixedCostTierID") 'Fixed Cost Tier ID (Composite = NULL or Normal = NOT NULL)
myFields.DefineField(FixedCostFields.NetworkId, myFieldCount + 5, "FixedCostNetworkID") 'Fixed Cost Network ID (Applies to All = NULL or Normal = NOT NULL)
myFields.DefineField(FixedCostFields.Name, myFieldCount + 6, "FixedCostName") 'Fixed Cost Name
myFields.DefineField(FixedCostTypeFields.Name, myFieldCount + 7, "FixedCostType") 'Fixed Cost Type
myFields.DefineField(FixedCostTypeFields.Id, myFieldCount + 8, "FixedCostTypeID") 'Fixed Cost Type ID
'Retreive Data from Database
'-----------------------------------------------------------------------------------------------------
myQuery.GetMultiAsDataTable(myFields, myDataTable, 0, mySort, myFilter, myRelations, True, Nothing, Nothing, 0, 0)
Your results are now contained in myDataTable.