public static List <T> Create <T>(List <ContactInfo> infos) where T : BCModelContact { var list = new List <T>(); var listId = infos.Select(c => c.Id).Distinct().ToList(); var listTdHistories = infos.Where(c => c.CallInfoConsultant.IsStringNullOrEmpty()).Select(c => c.Id).Distinct().ToList(); var xs = new XmlSerializer(typeof(List <int>)); var ms = new MemoryStream(); xs.Serialize(ms, listId); var resultXML = Encoding.UTF8.GetString(ms.ToArray()); var phones = PhoneRepository.GetByContacts_Xml(resultXML); var contactLevelInfos = ContactLevelInfoRepository.GetInfos_Xml(resultXML); xs = new XmlSerializer(typeof(List <int>)); ms = new MemoryStream(); xs.Serialize(ms, listTdHistories); resultXML = Encoding.UTF8.GetString(ms.ToArray()); var callHistories = CallHistoryRepository.GetAllByContactId_Xml(resultXML); foreach (var info in infos) { var t = Create <T>(info, contactLevelInfos, phones, callHistories); list.Add(t); } return(list); }