Ескертпе
Бұл бетке кіру үшін қатынас шегін айқындау қажет. Жүйеге кіруді немесе каталогтарды өзгертуді байқап көруге болады.
Бұл бетке кіру үшін қатынас шегін айқындау қажет. Каталогтарды өзгертуді байқап көруге болады.
where Используйте предложение в выражении запроса, чтобы указать, какие элементы из источника данных следует возвращать. Он применяет логическое условие (предикат) к каждому исходному элементу (на который ссылается переменная диапазона) и возвращает те элементы, для которых указанное условие имеет значение true. Одно выражение запроса может содержать несколько where предложений, а одно предложение может содержать несколько вложенных выражений предиката.
Справочные документы по языку C# описывают последнюю выпущенную версию языка C#. Она также содержит начальную документацию по функциям в общедоступных предварительных версиях для предстоящего языкового выпуска.
Документация определяет любую функцию, впервые представленную в последних трех версиях языка или в текущих общедоступных предварительных версиях.
Подсказка
Чтобы узнать, когда функция впервые появилась в C#, ознакомьтесь со статьей об истории версий языка C#.
В следующем примере предложение фильтрует все числа, where за исключением тех, которые меньше пяти. При удалении where предложения запрос возвращает все числа из источника данных. Выражение num < 5 представляет собой предикат, который запрос применяется к каждому элементу.
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
В одном where предложении можно указать столько предикатов, сколько необходимо, с помощью &&& и || операторов. В следующем примере запрос задает два предиката, чтобы выбрать только четные числа, которые меньше пяти.
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
Предложение where может содержать один или несколько методов, возвращающих логические значения. В следующем примере предложение использует метод для определения того, where является ли текущее значение переменной диапазона даже или нечетным.
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
Замечания
Предложение where — это механизм фильтрации. Его можно разместить практически в любом месте выражения запроса, за исключением того, что оно не может быть первым или последним предложением. Предложение where может отображаться до или после предложения группы в зависимости от того, нужно ли фильтровать исходные элементы до или после их группировки.
Если указать предикат, недопустимый для элементов в источнике данных, запрос приводит к ошибке во время компиляции. Эта ошибка является одним из преимуществ строгой проверки типов, которую предоставляет LINQ.
Во время where компиляции ключевое слово преобразуется в вызов Where метода "Стандартный оператор запросов".