public static IQueryable<T> LimitAndOffset<T>(this IQueryable<T> q, int pageSize, int pageOffset) { // while this Linq works on both Entity Framework and WCF Data Services... // return q.Skip((pageOffset - 1) * pageSize).Take(pageSize); // ...this Linq doesn't work on WCF Data Service return q.Take(pageSize).Skip((pageOffset - 1) * pageSize); }
I answered a colleague that Skip and Take's order doesn't matter (i.e. can call Take then Skip also) because it is deferredly executed, felt a little stupid for naturally assuming it applies to all Linq Providers :-) Linq for WCF Data Services doesn't allow Take then Skip. Don't assume anything when it comes to Linq.
Lesson learned, not all Linq providers are created equal. Lest I forgot, I already encountered one of many Linq's nuances a long time ago, example: http://www.ienablemuch.com/2010/12/performing-order-by-on-distinct-on-linq.html
I should have known better :-)
No comments:
Post a Comment