如何使用此擴展名?如何使用帶表達式參數的擴展?
public static IQueryable<TSource> MyOrderByType<TSource>(this IQueryable<TSource> source, bool condition, Expression<Func<TSource, string>> predicate)
{
return condition ? source.OrderBy(predicate) : source.OrderByDescending(predicate);
}
我用這種方式:
using (var ctx = new MyEntities())
{
result = ctx.Users
.MyOrderByType(sortType,p=>sortKey)
.ToList();
}
搜索方法:
public List<User> Search(string name, string sortKey, bool sortType)
{
List<User> result;
using (var ctx = new MyEntities())
{
result = ctx.Users
.where(u => u.name.contains(name))
.MyOrderByType(sortType, p => sortKey)
}
}
.ToList();
}
return result;
}
在後面的代碼
:
bool sortType=ddlSortType.SelectedValue=="0"?true:false;
string sortKey=ddlSortKey.SelectedValue;
var lstUser = userService.Search(txtName.Text,sortType,sortKey);
但它不會對結果進行分類。
有什麼不對?
由於缺乏錯過的信息MyEntities'如何'看起來像什麼'sortKey'是的,這只是胡亂猜測:我認爲這是沒有錯的擴展方法,但我想'sortKey'是不是一個簡單的「鑰匙」,而是一個複雜的鑰匙。所以請提供更多有關您設置的上下文信息。並請提供完整的編譯示例。 – ckruczek
請注意,'Queryable.OrderBy'返回'IOrderedQueryable',而不是'IQueryable'。如果你想實現'ThenBy'等,你可能也想這樣做。 –