Share via


Gewusst wie: Zurückgeben einer Abfrage aus einer Methode (C#-Programmierhandbuch)

Dieses Beispiel zeigt, wie eine Abfrage von einer Methode als Rückgabewert und als out-Parameter zurückgegeben wird.

Alle Abfragen müssen vom Typ IEnumerable oder IEnumerable oder von einem abgeleiteten Typ wie IQueryable sein. Daher müssen alle Rückgabewerte oder out-Parameter einer Methode, die eine Abfrage zurückgibt, ebenfalls diesen Typ haben. Wenn eine Methode eine Abfrage in einen konkreten List- oder Array-Typ materialisiert, wird sie so betrachtet, als würde sie die Abfrageergebnisse zurückgeben, und nicht die Abfrage selbst. Eine von einer Methode zurückgegebene Abfragevariable kann immer noch zusammengesetzt oder geändert werden.

Beispiel

Im folgenden Beispiel gibt die erste Methode eine Abfrage als Rückgabewert zurück, und die zweite Methode gibt eine Abfrage als out-Parameter zurück. Beachten Sie, dass in beiden Fällen keine Abfrageergebnisse zurückgegeben werden, sondern eine Abfrage zurückgegeben wird.

class MQ
{
    // QueryMethhod1 returns a query as its value.
    IEnumerable<string> QueryMethod1(ref int[] ints)
    {
        var intsToStrings = from i in ints
                            where i > 4
                            select i.ToString();
        return intsToStrings;
    }

    // QueryMethod2 returns a query as the value of parameter returnQ. 
    void QueryMethod2(ref int[] ints, out IEnumerable<string> returnQ)
    {
        var intsToStrings = from i in ints
                            where i < 4
                            select i.ToString();
        returnQ = intsToStrings;
    }

    static void Main()
    {
        MQ app = new MQ();

        int[] nums = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 };

        // QueryMethod1 returns a query as the value of the method. 
        var myQuery1 = app.QueryMethod1(ref nums);

        // Query myQuery1 is executed in the following foreach loop.
        Console.WriteLine("Results of executing myQuery1:");
        // Rest the mouse pointer over myQuery1 to see its type. 
        foreach (string s in myQuery1)
        {
            Console.WriteLine(s);
        }

        // You also can execute the query returned from QueryMethod1  
        // directly, without using myQuery1.
        Console.WriteLine("\nResults of executing myQuery1 directly:");
        // Rest the mouse pointer over the call to QueryMethod1 to see its 
        // return type. 
        foreach (string s in app.QueryMethod1(ref nums))
        {
            Console.WriteLine(s);
        }


        IEnumerable<string> myQuery2;
        // QueryMethod2 returns a query as the value of its out parameter.
        app.QueryMethod2(ref nums, out myQuery2);

        // Execute the returned query.
        Console.WriteLine("\nResults of executing myQuery2:");
        foreach (string s in myQuery2)
        {
            Console.WriteLine(s);
        }


        // You can modify a query by using query composition. A saved query 
        // is nested inside a new query definition that revises the results 
        // of the first query.
        myQuery1 = from item in myQuery1
                   orderby item descending 
                   select item;

        // Execute the modified query.
        Console.WriteLine("\nResults of executing modified myQuery1:");
        foreach (string s in myQuery1)
        {
            Console.WriteLine(s);
        }

        // Keep console window open in debug mode.
        Console.WriteLine("Press any key to exit.");
        Console.ReadKey();
    }
} 

Kompilieren des Codes

  • Erstellen Sie ein Visual Studio-Projekt für .NET Framework, Version 3.5 oder höher. Standardmäßig weist das Projekt einen Verweis auf System.Core.dll und eine using-Direktive für den System.Linq-Namespace auf.

  • Ersetzen Sie die Klasse durch den Code im Beispiel.

  • Drücken Sie F5, um das Programm zu kompilieren und auszuführen.

  • Drücken Sie eine beliebige Taste, um das Konsolenfenster zu schließen.

Siehe auch

Konzepte

LINQ-Abfrageausdrücke (C#-Programmierhandbuch)