(0) exportieren Drucken
Alle erweitern
Dieser Artikel wurde manuell übersetzt. Bewegen Sie den Mauszeiger über die Sätze im Artikel, um den Originaltext anzuzeigen.
Übersetzung
Original

Gewusst wie: Verwenden von Lambda-Ausdrücken in einer Abfrage (C#-Programmierhandbuch)

Sie verwenden zwar keine Lambda-Ausdrücke direkt in der Abfragesyntax, aber in Methodenaufrufen. Außerdem können Abfrageausdrücke Methodenaufrufe enthalten. Einige Abfrageoperationen können sogar nur unter Verwendung von Methodensyntax ausgedrückt werden. Weitere Informationen über den Unterschied zwischen Abfragesyntax und Methodensyntax finden Sie unter LINQ-Abfragesyntax und Methodensyntax (C#).

Im folgenden Beispiel wird der Umgang mit einem Lambda-Ausdruck in einer methodenbasierten Abfrage veranschaulicht, indem der Enumerable.Where-Standardabfrageoperator verwendet wird. Beachten Sie, dass die Where-Methode in diesem Beispiel einen Eingabeparameter des Delegattyps Func<TResult> hat. Dieser Typ ist ein Delegat, der eine ganze Zahl als Eingabe erfordert und einen booleschen Wert zurückgibt. Der Lambda-Ausdruck kann in diesen Delegattyp konvertiert werden. Wäre dies eine LINQ to SQL-Abfrage, welche die Queryable.Where-Methode verwendet, wäre der Parameter vom Typ Expression<Func<int,bool>>, aber der Lambda-Ausdruck würde genau gleich aussehen. Weitere Informationen über den Expression-Typ finden Sie unter System.Linq.Expressions.Expression.


class SimpleLambda
{
    static void Main()
    {

        // Data source.
        int[] scores = { 90, 71, 82, 93, 75, 82 };

        // The call to Count forces iteration of the source
        int highScoreCount = scores.Where(n => n > 80).Count();

        Console.WriteLine("{0} scores are greater than 80", highScoreCount);

        // Outputs: 4 scores are greater than 80            
    }
}


Im folgenden Beispiel wird die Verwendung eines Lambda-Ausdrucks in dem Methodenaufruf eines Abfrageausdrucks veranschaulicht. Der Lambda-Ausdruck ist erforderlich, da der Sum()-Standardabfrageoperator nicht mithilfe der Abfragesyntax aufgerufen werden kann.

Mit der Abfrage werden die Studierenden zunächst nach ihrer Jahrgangsstufe gruppiert, wie in der GradeLevel-Enumeration definiert. Dann werden für jede Gruppe die Ergebnisse pro Student addiert. Dies erfordert zwei Sum-Operationen. Mit der inneren Sum-Operation wird das Gesamtergebnis für jeden Studenten berechnet, und mit der äußeren Sum-Operation wird eine kombinierte laufende Summe für alle Studenten in der Gruppe berechnet.


private static void TotalsByGradeLevel()
{
    // This query retrieves the total scores for First Year students, Second Years, and so on.
    // The outer Sum method uses a lambda in order to specify which numbers to add together.
    var categories =
    from student in students
    group student by student.Year into studentGroup
    select new { GradeLevel = studentGroup.Key, TotalScore = studentGroup.Sum(s => s.ExamScores.Sum()) };

    // Execute the query.   
    foreach (var cat in categories)
    {
        Console.WriteLine("Key = {0} Sum = {1}", cat.GradeLevel, cat.TotalScore);
    }
}
/*
     Outputs: 
     Key = SecondYear Sum = 1014
     Key = ThirdYear Sum = 964
     Key = FirstYear Sum = 1058
     Key = FourthYear Sum = 974
*/


Um diesen Code auszuführen, kopieren Sie die Methode und fügen sie diese in die StudentClass-Klasse ein, die in Gewusst wie: Abfragen einer Auflistung von Objekten (C#-Programmierhandbuch) bereitgestellt wird. Rufen Sie diese Methode dann in der Main-Methode auf.

Community-Beiträge

HINZUFÜGEN
Anzeigen:
© 2014 Microsoft