public IList <TrackingEvent> RetrieveTrackingEventData(Type eventType, DateTime sinceWhen, String eventTypeString, ClientID clientId = null, string TriggeredSendDefinitionObjectID = "") { //String filterField = "CreatedDate"; String filterField = "EventDate"; var properties = GetRetrivableProperties(eventTypeString).ToArray(); SimpleFilterPart filter = new SimpleFilterPart(); //Use this only if you are retrieving for TriggeredSend filter.Property = "TriggeredSendDefinitionObjectID"; String[] vlaues = { TriggeredSendDefinitionObjectID }; //filter.Property = "SendID"; //String[] vlaues = { "28980" }; filter.Value = vlaues; var dateFilter = new SimpleFilterPart { Property = filterField, SimpleOperator = SimpleOperators.greaterThanOrEqual, DateValue = new DateTime[] { sinceWhen } }; ComplexFilterPart cfilter = new ComplexFilterPart(); cfilter.LeftOperand = filter; cfilter.LogicalOperator = LogicalOperators.AND; cfilter.RightOperand = dateFilter; RetrieveRequest retrieveRequest = new RetrieveRequest { ObjectType = eventType.Name, Properties = properties, Filter = cfilter, ClientIDs = new ClientID[] { clientId } }; APIObject[] results = null; String requestId = null, message; SoapClient client = _client; String status = ""; IList <TrackingEvent> returnList = new List <TrackingEvent>(); do { status = client.Retrieve(retrieveRequest, out requestId, out results); if (!client.GetResult(status, results, out message)) { //WriteToLog(PIMCO.SMS.Logging.Category.Exception, message); //throw new ExactTargetException(message); } for (int i = 0; i < results.Length; i++) { returnList.Add((TrackingEvent)results[i]); } //This calls the API again to get the next 2500 records retrieveRequest = new RetrieveRequest(); retrieveRequest.ContinueRequest = requestId; } while (status.Equals("MoreDataAvailable")); return(returnList.ToList()); }