我有一個很多DbSets的DbContext。每個DbSet都應該有一個函數,可以從set中獲取一個頁面,並使用給定的pageSize並按特定的sortOrder排序。喜歡的東西:如何創建表達式<Func <TSource,bool>通過比較Func <TSource,int>與int
var pageItems = dbContext.Posts
.Where(post => post.BlogId == blogId)
.OrderBy(some sortorder)
.Skip(pageNr * pageSize)
.Take(pageSize);
我希望能夠用我所有的DbSets要做到這一點,所以我創造了這個外鍵應有的擴展方法,其中的一個參數指定的外鍵比較和另一個值。
public static IQueryable<TSource> GetPage<TSource>(this IQueryable<TSource> source,
int pageNr, int pageSize,
Expression<Func<TSource, Tproperty>> keySelector, Tproperty comparisonValue)
{
return source
.Where(???)
.OrderBy(some sortorder)
.Skip(pageNr * pageSize)
.Take(pageSize);
}
如何將keySelector轉換爲適合Where的謂詞?
Jon Skeet到達 –
您可以嘗試使用'Expression.LessThan'並將您的'keySelector'和'comprasionValue'的body傳遞給'Expression.Constant'。 –
讓我們來解釋Where。你將如何解決'OrderBy'? –