c# - 如何在泛型函数方法调用中使用按参数排序
问题描述
我是使用泛型的新手。非常强大的东西,但对我来说有点困惑,我试图了解如何使用以下代码:
public async Task<IEnumerable<TEntity>> Find(Expression<Func<TEntity, bool>> predicate, Func<IQueryable<TEntity>, IOrderedQueryable<TEntity>> orderExpression = null)
{
try
{
return await this.GetQuery(predicate, orderExpression);
}
catch (Exception e)
{
return null;
}
}
public async Task<IQueryable<TEntity>> GetQuery(Expression<Func<TEntity, bool>> predicate = null, Func<IQueryable<TEntity>, IOrderedQueryable<TEntity>> orderExpression = null)
{
IQueryable<TEntity> qry = this.DBSet;
if (predicate != null)
qry = qry.Where(predicate);
if (orderExpression != null)
return orderExpression(qry);
return qry;
}
我可以使用如下谓词调用 find 方法:
@code {
[Parameter]
public string CurrentID { get; set; }
Repository2<User> repository2 = new Repository2<User>();
IEnumerable<User> users;
User user = new User();
protected override async Task OnInitializedAsync()
{
users = await Task.Run(() => repository2.Find(u => u.ID == Convert.ToInt32(CurrentID)));
user = users.SingleOrDefault();
}
protected void UpdateUser()
{
repository2.Update<User>(user);
repository2.SaveChanges();
navidationMananger.NavigateTo("Users");
}
void Cancel()
{
navidationMananger.NavigateTo("Users");
}
}
但是我无法弄清楚如何使用上述 Find 方法的 OrderBy 功能。
我将如何调用此方法作为第二个参数传递订单?如果您能稍微解释一下,那么我会理解它为什么会起作用,那将不胜感激。
解决方案
我在另一个线程中找到了答案:
动态 Func<IQueryable<TEntity>, IOrderedQueryable<TEntity>> 表达式
await repository2.Find(s => s.StationID == 1, q => q.OrderBy(s => s.DisplayOrder));
推荐阅读
- java - 无法从位置解组 Metro 配置文件发生在基于 debian 的远程服务器上,但在 Windows 10 本地却没有
- java - Swagger-UI 为具有多部分表单数据的 @ModelAttribute 提供空值
- javascript - JS。如何跟踪同一容器中三个单独部分的进度
- javascript - 使用 Typescript 接口 - 错误:属性不存在
- nginx - openresty/nginx 无法让 ssl 正常工作
- c++ - 如何从发生异常的位置获取系统异常行号
- reactjs - React 中 JSX.Element 的 TypeScript 接口问题
- android - 如何用手指移动元素,但从它所在的位置?
- php - 此路由不支持 PUT 方法。支持的方法:POST。在我的项目中
- c - 实现定义的行为是未定义的行为吗