Was bedeutet der Fehler "Extension-Methode muss statisch sein" bedeuten?

Ich habe Probleme mit dieser Klasse, insbesondere die Methode:

public IQueryable<T> ExecuteOrderBys<T>(this IQueryable<T> source)

Sagt es die Fehlermeldung:

Erweiterung Methode muss statisch sein

Allerdings wenn ich die Methode statisch ist, wirft es andere Bereiche, speziell auf this.xxx kann nicht zugegriffen werden, in der eine statische Methode.

Ich bin ein wenig verwirrt über die Rückkehr Typen mit <T> und die Rückgabetypen, wenn jemand könnte es mir erklären und wie es funktioniert wäre ich dankbar.

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Collections;


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

    public int? Skip { get; set; }
    public int? Take { get; set; }

    public OrderByCollection()
    {
        //Default skip and takes to nulls so we know if they are set or not
        this.Skip = null;
        this.Take = null;
    }

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

    ///<summary>
    ///Executes the order bys
    ///</summary>
    public IQueryable<T> ExecuteOrderBys<T>(this IQueryable<T> 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((IOrderedQueryable<T>)source, O.Field);
                else
                    source = LinqHelper.ThenBy((IOrderedQueryable<T>)source, O.Field);
            }
            ExecutionIndex++;
        }

        //Skip and take
        if (this.Skip != null)
            source = source.Skip(this.Skip.Value);
        if (this.Take != null)
            source = source.Take(this.Take.Value);

        return (IOrderedQueryable<T>)source;
    }
}

Bearbeiten

Ich versuche, mich eine Klasse, die Folgendes tun können:

var q = db.tblJobHeaders;

OrderByCollection OBys = new OrderByCollection();
OBys.AddOrderBy("some field", true);
OBys.AddOrderBy("anotherfield", false);
OBys.ExecuteOrderBys(q);
Hi Tom, Kannst du bitte posten Sie den code für ExecuteOrderBys?
Dies ist die gleiche Ausgabe, die Sie gerade fragte: stackoverflow.com/questions/6096299/... - ja, verschiedene Klassen, aber im wesentlichen das gleiche Problem.
Es wurde das Thema im nicht-statische Klasse, hier - in nicht-statische Methode. Beide compiler-Fehler sind Recht informativ, btw.
ich habe einige code auf, wie die Klasse arbeiten soll, ich bin wirklich verwirrt jetzt, ich wollen einfach nur eine einfache Methode, die ich denke, es ist anders als meine anderen Fragen sorry wenn es nicht ist, aber ich habe Schwierigkeiten, das zu verstehen.
Ich glaube nicht, dass ich will, dass es eine Erweiterung Methode, ich bin wirklich verwirrt darüber. Ich will einfach nur, dass es eine normale Methode, die in einigen Daten und gibt einige Daten, aber die return-Typen sind verwirrend mich. Ich habe nicht diesen

InformationsquelleAutor Tom Gullen | 2011-05-23

Schreibe einen Kommentar