 <p>Since you mention that the items can be sorted by 1, 2 or 3 fields, you can expand on jeroenh's response, and "merge" it with the logic from Orchard:</p> <pre><code>public interface IRepository&lt;T&gt; { IQueryable&lt;T&gt; All(); IQueryable&lt;T&gt; Sorted(Func&lt;T, object&gt; sort1, Func&lt;T, object&gt; sort2 = null, Func&lt;T, object&gt; sort3 = null); } public class Repository&lt;T&gt; : IRepository&lt;T&gt; { public IQueryable&lt;T&gt; All() { // TODO: Implement real data retrieval return new List&lt;T&gt;().AsQueryable(); } public IQueryable&lt;T&gt; Sorted(Func&lt;T, object&gt; sort1, Func&lt;T, object&gt; sort2 = null, Func&lt;T, object&gt; sort3 = null) { var list = All(); var res = list.OrderBy(sort1); if (sort2 != null) res = res.ThenBy(sort2); if (sort3 != null) res = res.ThenBy(sort3); return res.AsQueryable(); } } </code></pre>