 <p>I have done something like this in my code recently. Would the following work for you?</p> <pre><code>public TEntity GetById(Guid id, params Expression&lt;Func&lt;TEntity, object&gt;&gt;[] includeProperties) { if (id == Guid.Empty) return null; var set = _unitOfWork.CreateSet&lt;TEntity&gt;(); foreach(var includeProperty in includeProperties) { set.Include(includeProperty); } return set.First(i =&gt; i.Id == id); } </code></pre> <p>Then you would call it like this...</p> <p><code>var entity = _repository.GetById(theId, e =&gt; e.Prop1, e=&gt; e.Prop2, e=&gt; e.Prop3);</code></p> <p>I know this doesn't exactly follow your pattern, but I think you could refactor it as required.</p>