public object GetAggregate(Guid id, XrmService service) { object newValue = null; switch (AggregateType) { case AggregateType.Exists: { //if the aggregate returns a result > 0 then one exists var fetch = GetLookupFetch(id); var result = service.RetrieveAllFetch(fetch); newValue = result.Any() && XrmEntity.GetInt(result.ElementAt(0).GetFieldValue(FetchAlias)) > 0; break; } case AggregateType.Count: { var result = service.RetrieveAllFetch(GetLookupFetch(id)); if (result.Any()) { newValue = result.ElementAt(0).GetFieldValue(FetchAlias); } break; } case AggregateType.Sum: { var result = service.RetrieveAllFetch(GetLookupFetch(id)); if (result.Any()) { newValue = result.ElementAt(0).GetFieldValue(FetchAlias); } break; } case AggregateType.Min: { var query = GetAggregatedRecordQueryForLookup(id); query.AddOrder(AggregatedField, OrderType.Ascending); var minRecord = service.RetrieveFirst(query); newValue = minRecord.GetField(AggregatedField); break; } case AggregateType.CSV: case AggregateType.PSV: { var query = GetAggregatedRecordQueryForLookup(id); query.AddOrder(AggregatedField, OrderType.Ascending); var records = service.RetrieveAll(query); var labels = records.Select( delegate(Entity item) { return(item.GetField(AggregatedField)); }). ToArray(); if (AggregateType == AggregateType.CSV) { newValue = string.Join(", ", labels); } else { newValue = string.Join("|", labels); } newValue = ((string)newValue).Left(1000); break; } } if (newValue == null && NullAmount != null) { newValue = NullAmount; } return(newValue); }