var ascendingQuery = from data in dataList orderby data.Property ascending select data; var descendingQuery = from data in dataList orderby data.Property descending select data; public static IOrderedEnumerable OrderByWithDirection (this IEnumerable source, Func keySelector, bool descending) { return descending ? source.OrderByDescending(keySelector) : source.OrderBy(keySelector); } public static IOrderedQueryable OrderByWithDirection (this IQueryable source, Expression> keySelector, bool descending) { return descending ? source.OrderByDescending(keySelector) : source.OrderBy(keySelector); } var query = dataList.OrderByWithDirection(x => x.Property, direction); var qry = from .... // or just dataList.AsEnumerable()/AsQueryable() if(sortAscending) { qry = qry.OrderBy(x=>x.Property); } else { qry = qry.OrderByDescending(x=>x.Property); }