where-sats (C#-referens)

where Satsen används i ett frågeuttryck för att ange vilka element från datakällan som ska returneras i frågeuttrycket. Det tillämpar ett booleskt villkor (predikat) på varje källelement (som refereras av intervallvariabeln) och returnerar de för vilka det angivna villkoret är sant. Ett enskilt frågeuttryck kan innehålla flera where satser och en enskild sats kan innehålla flera predikatunderuttryck.

Exempel 1

I följande exempel where filtrerar satsen ut alla tal utom de som är mindre än fem. Om du tar bort where -satsen returneras alla tal från datakällan. Uttrycket num < 5 är predikatet som tillämpas på varje element.

class WhereSample
{
    static void Main()
    {
        // Simple data source. Arrays support IEnumerable<T>.
        int[] numbers = [5, 4, 1, 3, 9, 8, 6, 7, 2, 0];

        // Simple query with one predicate in where clause.
        var queryLowNums =
            from num in numbers
            where num < 5
            select num;

        // Execute the query.
        foreach (var s in queryLowNums)
        {
            Console.Write(s.ToString() + " ");
        }
    }
}
//Output: 4 1 3 2 0

Exempel 2

Inom en enda where sats kan du ange så många predikat som behövs med hjälp av & och|| operatorerna. I följande exempel anger frågan två predikat för att bara välja de jämna tal som är mindre än fem.

class WhereSample2
{
static void Main()
{
    // Data source.
    int[] numbers = [5, 4, 1, 3, 9, 8, 6, 7, 2, 0];

    // Create the query with two predicates in where clause.
    var queryLowNums2 =
        from num in numbers
        where num < 5 && num % 2 == 0
        select num;

    // Execute the query
    foreach (var s in queryLowNums2)
    {
        Console.Write(s.ToString() + " ");
    }
    Console.WriteLine();

    // Create the query with two where clause.
    var queryLowNums3 =
        from num in numbers
        where num < 5
        where num % 2 == 0
        select num;

    // Execute the query
    foreach (var s in queryLowNums3)
    {
        Console.Write(s.ToString() + " ");
    }
}
}
// Output:
// 4 2 0
// 4 2 0

Exempel 3

En where sats kan innehålla en eller flera metoder som returnerar booleska värden. I följande exempel where använder satsen en metod för att avgöra om det aktuella värdet för intervallvariabeln är jämnt eller udda.

class WhereSample3
{
    static void Main()
    {
        // Data source
        int[] numbers = [5, 4, 1, 3, 9, 8, 6, 7, 2, 0];

        // Create the query with a method call in the where clause.
        // Note: This won't work in LINQ to SQL unless you have a
        // stored procedure that is mapped to a method by this name.
        var queryEvenNums =
            from num in numbers
            where IsEven(num)
            select num;

         // Execute the query.
        foreach (var s in queryEvenNums)
        {
            Console.Write(s.ToString() + " ");
        }
    }

    // Method may be instance method or static method.
    static bool IsEven(int i) => i % 2 == 0;
}
//Output: 4 8 6 2 0

Kommentarer

Satsen where är en filtreringsmekanism. Det kan placeras nästan var som helst i ett frågeuttryck, förutom att det inte kan vara den första eller sista satsen. En where sats kan visas antingen före eller efter en gruppsats beroende på om du måste filtrera källelementen före eller efter att de har grupperats.

Om ett angivet predikat inte är giltigt för elementen i datakällan resulterar ett kompileringsfel. Detta är en fördel med den starka typkontroll som tillhandahålls av LINQ.

Vid kompileringstillfället konverteras nyckelordet where till ett anrop till Where metoden Standard Query Operator.

Se även