public List <WorkItem> PageWorkitemsByIds(StoredQuery query, List <int> ids) { if (ids.Count > 50) { throw new Exception("Page only by 50"); } var invoker = new SoapInvoker(this); var msg = invoker.CreateEnvelope("PageWorkitemsByIds", headerName); msg.Header.Add(GetHeaderElement()); msg.Body.Add(new XElement(MessageNs + "ids", ids.Select(i => new XElement(MessageNs + "int", i)))); var columns = query.GetSelectColumns(); var fields = CachedMetaData.Instance.Fields.GetFieldsByNames(columns); if (fields["System.Id"] == null) //If No id Exists add it { fields.Insert(0, CachedMetaData.Instance.Fields["System.Id"]); } msg.Body.Add(new XElement(MessageNs + "columns", fields.Where(f => !f.IsLongField).Select(c => new XElement(MessageNs + "string", c.ReferenceName)))); msg.Body.Add(new XElement(MessageNs + "longTextColumns", fields.Where(f => f.IsLongField).Select(c => new XElement(MessageNs + "int", c.Id)))); var response = invoker.InvokeResponse(); var extractor = new TableDictionaryExtractor(response, "Items"); var data = extractor.Extract(); List <WorkItem> list = new List <WorkItem>(); foreach (var item in data) { list.Add(new WorkItem { WorkItemInfo = item }); } return(list); }