public static IEnumerable <DataObject> FlattenItems(Request request) { if (!request.issueRequestResponse["key"].ToString().Contains("POB") || !request.issueRequestResponse["fields"]["issuetype"]["name"].ToString().Contains("Story")) { throw new Exception("This is not an OLB story"); } var transitions = new List <Transition>(); lock (transitions) foreach (var requestResponse in request.issueChangeLogRequestResponses) { var values = requestResponse["values"].Where(v => v["items"].Any(i => i.Value <string>("field") == "status")); foreach (var value in values) { foreach (var item in value["items"]) { transitions.Add(new Transition { created = value.Value <DateTime>("created"), toString = item.Value <string>("to"), fromString = item.Value <string>("from") }); } } } Issue issue = new Issue { id = (string)request.issueRequestResponse["key"], type = (string)request.issueRequestResponse["fields"]["issuetype"]["name"], storyPoints = (string)request.issueRequestResponse["fields"]["customfield_10024"], transitions = transitions.ToArray() }; TransitionHelper transitionHelper = new TransitionHelper(issue); yield return(new DataObject { id = issue.id, storyPoints = issue.storyPoints, type = issue.type, qa_total_done_time = transitionHelper.GetTotalQAHours(), in_qa_time = transitionHelper.getInQATime(), dev_total_done_time = transitionHelper.getTotalDevHours(), qa_sitting_time = transitionHelper.getQASittingTime(), in_dev_time = transitionHelper.getInDevTime(), dev_sitting_time = transitionHelper.getDevSittingTime(), time_to_done = transitionHelper.getTotalDevelopmentTime(), doneDate = transitionHelper.getDoneDate() }); }