首页 > 解决方案 > 如何在泛型函数方法调用中使用按参数排序

问题描述

我是使用泛型的新手。非常强大的东西,但对我来说有点困惑,我试图了解如何使用以下代码:

    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 功能。

我将如何调用此方法作为第二个参数传递订单?如果您能稍微解释一下,那么我会理解它为什么会起作用,那将不胜感激。

标签: c#genericsblazor

解决方案


我在另一个线程中找到了答案:

动态 Func<IQueryable<TEntity>, IOrderedQueryable<TEntity>> 表达式

await repository2.Find(s => s.StationID == 1, q => q.OrderBy(s => s.DisplayOrder));

推荐阅读