Расширение динамического порядка Linq Марка Грейвелла По

Я отлично нашел динамический порядок Марка Гравелла:

Dynamic LINQ OrderBy на IEnumerable

Я поставил его в классе, LinqHelper . В этом классе я также создал два новых класса, так что в моем коде я могу сделать это:

var q = db.tblJobHeaders;

LinqHelper.OrderByCollection OBys = new LinqHelper.OrderByCollection();
OBys.AddOrderBy("some field", true);
OBys.AddOrderBy("anotherfield", false);
OBys.ExecuteOrderBys(q);

Вот классы, которые нужно достичь:

/// 
/// A collection of order bys
/// 
public class OrderByCollection
{
    private ArrayList Orderings = new ArrayList();

    public OrderByCollection(){ }

    /// 
    /// Add an order by to this collection
    /// 
    public void AddOrderBy(string Field, bool Descending)
    {
        OrderByObj NewObj = new OrderByObj(Descending, Field);
        this.Orderings.Add(NewObj);
    }

    /// 
    /// Executes the order bys
    /// 
    public IOrderedQueryable ExecuteOrderBys(this IOrderedQueryable source)
    {
        int ExecutionIndex = 0;
        foreach (OrderByObj O in this.Orderings)
        {
            if (ExecutionIndex == 0)
            {
                if (O.Descending)
                    source = LinqHelper.OrderByDescending(source, O.Field);
                else
                    source = LinqHelper.OrderBy(source, O.Field);
            }
            else
            {
                if (O.Descending)
                    source = LinqHelper.ThenByDescending(source, O.Field);
                else
                    source = LinqHelper.ThenBy(source, O.Field);
            }
            ExecutionIndex++;
        }
        return (IOrderedQueryable)source;
    }
}

/// 
/// An order by object
/// 
private class OrderByObj
{
    public bool Descending { get; set; }
    public string Field { get; set; }

    public OrderByObj(bool IsDescending, string DatabaseField)
    {
        this.Descending = IsDescending;
        this.Field = DatabaseField;
    }
}

Как бы то ни было, я новичок в передаче переменных Linq функциям (смущает мне немного). В настоящее время я получаю сообщение об ошибке:

OBys.ExecuteOrderBys(q);

Что дает ошибку:

Аргументы типа для метода 'LinqHelper.OrderByCollection.ExecuteOrderBys (System.Linq.IOrderedQueryable)' не может быть выведено из использования. Пытаться указание аргументов типа

Я немного сбит с толку, если кто-нибудь может помочь, правильно ли я передаю var q , а затем возвращаю его должным образом?

7
задан Community 23 May 2017 в 10:34
поделиться