2013-07-28 30 views
0

如何將一個或多個lambda命令按子句傳遞給方法並將它追加到linq中以便像下面那樣的實體查詢?我不想傳遞字符串,這在前面已經討論過了,它應該是用於維護性/重構/編譯支持的lambda表達式。如何將IOrderedQueryable傳遞給方法並將其追加到查詢中

public IList<UserRating> GetUserRatings(int userId, IPager pager, IOrderedQueryable<UserRating> orderBy) 
{ 
    return _userRatingRepository.Table.Where(a => a.UserId == userId).Skip(pager.Skip).Take(pager.PageSize). /* orderBy goes here */ .ToList(); 
} 

回答

1

繼承人我如何做到這一點:

public IList<UserRating> GetUserRatings<TKey>(
    int userId, 
    IPager pager, 
    Func<UserRating, TKey> orderBy) 
{ 
    return _userRatingRepository 
     .Table 
     .Where(a => a.UserId == userId) 
     .Skip(pager.Skip) 
     .Take(pager.PageSize) 
     .OrderBy(orderBy) 
     .ToList(); 
} 

用法:

GetUserRatings(1,pager, u=> u.Id) 
+0

有沒有修改這個指定排序依據,OrderByDescending,ThenBy,與ThenByDescending條款的方式?根據調用函數的代碼,我需要使用升序和降序的不同組合來執行多個命令,這就是爲什麼我在考慮_IOrderedQueryable_類。 – TugboatCaptain

+0

@StrandedPirate嗯,如果你想做這麼多的定製,也許在方法內不是這種類型的最佳場所。您可以從GetUserRatings中完全刪除該命令,然後在實際使用時添加.OrderBy。如果你先toList,排序將在內存中完成,而不是在SQL中完成。如果你返回一個IQueriable,你可以添加orderby並在數據庫中執行 –

+0

@StrandedPirate如果你仍然想在這個方法中使用它,你可以使用'Tuple > orderBy,params元組> [] thenBy'但是這很複雜,我使用類似的東西運行包括通過我的通用知識庫。 –