 <p>Right answer would be declaring a common base class or interface but you said "I tried polymorphism, but". I do not know what (or how) did you try but assuming,</p> <ol> <li>You are sure that all classes have a <code>ToModel()</code> method</li> <li>It is not practical to declare a common interface or base class for your classes</li> <li>You are using .NET 4.0 or above</li> </ol> <p>You can do</p> <pre><code>var type = _projectService.GetTaskTypeById(id); dynamic task; switch (type) { case "MS": task = _projectService.GetMSTaskById(id); break; case "TL": task = _projectService.GetTLTaskById(id); break; case "ET": task = _projectService.GetETTaskById(id); break; default: throw new NotSupportedException("Unsupported Task Type: " + type); } task.ToModel(); </code></pre>