Hi guys,
I have a case that I need to retrieve Extra Costs linked to a Trainee and from a specific Training. I know how to query for the Extra Costs of a Training and the Extra Costs of a Trainee. I then compare both lists and retrieve matching ones. That works but it is really a performance hit. How can i add a join to one of the query's to combine both?
Here is the code i am running now:
//THIS SECTION RETURNS ME ALL EXTRA COSTS FROM A TRAINING
ConditionExpression ceOpleidingExtraKost = new ConditionExpression("cref8_extrakosttraining", ConditionOperator.Equal, targetEntity.Id);
QueryExpression qeOpleidingExtraKost = new QueryExpression("cref8_extrakost");
qeOpleidingExtraKost.ColumnSet = new ColumnSet(true);
qeOpleidingExtraKost.Criteria.AddCondition(ceOpleidingExtraKost);
EntityCollection opleidingExtraKostResult = service.RetrieveMultiple(qeOpleidingExtraKost);
//THIS SECTION RETURNS ME ALL EXTRA COSTS FROM A TRAINEE
var query = new QueryExpression()
{
EntityName = "cref8_extrakost",
ColumnSet = new ColumnSet(true),
};
var link = query.AddLink("cref8_extrakost_cref8_cursist", "cref8_extrakostid", "cref8_extrakostid");
link.LinkCriteria = new FilterExpression()
{
Conditions =
{
new ConditionExpression("cref8_cursistid", ConditionOperator.Equal, relatedEntity.Id)
}
};
var cursistExtraKosts = service.RetrieveMultiple(query);
//COMPARE BOTH EXTRA COSTS COLLECTION TO RETRIEVE ONLY THE ONES FROM A TRAINEE AND A SPECIFIC TRAINING
double traineeExtraKostKost=0;
EntityCollection TraineeTrainingExtraKostsCollection = new EntityCollection();
foreach (var extrakost in opleidingExtraKostResult.Entities)
{
foreach (var traineeExtraKost in cursistExtraKosts.Entities)
{
if (traineeExtraKost.Id==extrakost.Id)
{
traineeExtraKostKost = Convert.ToDouble(traineeExtraKost.Attributes.FirstOrDefault(q => q.Key == "cref8_prijs").Value);
TraineeTrainingExtraKostsCollection.Entities.Add(extrakost);
}
}
}

Report
All responses (
Answers (