The*_*Sky 1 c# linq asp.net-mvc
我正在尝试创建一个存储库类,它具有一个基于"sort"参数对结果进行排序的方法.我需要将它作为参数传递,因为我试图非常严格,我的存储库不返回IQueryable并且只返回List.问题是我不知道如何制作它以满足以下要求:
这是否可能,或者存储库是否允许返回订购?存储库是否应该只能执行CRUD操作?也许返回IQueryable是最好的选择?
也许你需要这样的东西:
public class Ordering<T>
{
private readonly Func<IQueryable<T>, IOrderedQueryable<T>> transform;
private Ordering(Func<IQueryable<T>, IOrderedQueryable<T>> transform)
{
this.transform = transform;
}
public static Ordering<T> Create<TKey>
(Expression<Func<T, TKey>> primary)
{
return new Ordering<T>(query => query.OrderBy(primary));
}
public Ordering<T> ThenBy<TKey>(Expression<Func<T, TKey>> secondary)
{
return new Ordering<T>(query => transform(query).ThenBy(secondary));
}
// And more for the descending methods...
internal IOrderedQueryable<T> Apply(IQueryable<T> query)
{
return transform(query);
}
}
Run Code Online (Sandbox Code Playgroud)
然后客户端可以创建一个Ordering<T>传递到存储库,并且存储库可以Apply使用IQueryable<T>.那有意义吗?
样品(略显傻)使用:
var ordering = Ordering<FileInfo>.Create(fi => fi.Length)
.ThenBy(fi => fi.Name);
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2510 次 |
| 最近记录: |