Queryable.Single Метод

Определение

Возвращает единственный конкретный элемент последовательности.

Перегрузки

Single<TSource>(IQueryable<TSource>)

Возвращает единственный элемент последовательности и генерирует исключение, если число элементов последовательности отлично от 1.

Single<TSource>(IQueryable<TSource>, Expression<Func<TSource,Boolean>>)

Возвращает единственный элемент последовательности, удовлетворяющий указанному условию, и вызывает исключение, если таких элементов больше одного.

Single<TSource>(IQueryable<TSource>)

Возвращает единственный элемент последовательности и генерирует исключение, если число элементов последовательности отлично от 1.

public:
generic <typename TSource>
[System::Runtime::CompilerServices::Extension]
 static TSource Single(System::Linq::IQueryable<TSource> ^ source);
public static TSource Single<TSource> (this System.Linq.IQueryable<TSource> source);
static member Single : System.Linq.IQueryable<'Source> -> 'Source
<Extension()>
Public Function Single(Of TSource) (source As IQueryable(Of TSource)) As TSource

Параметры типа

TSource

Тип элементов source.

Параметры

source
IQueryable<TSource>

Объект IQueryable<T>, единственный элемент которого требуется возвратить.

Возвращаемое значение

TSource

Единственный элемент входной последовательности.

Исключения

source имеет значение null.

source имеет более одного элемента.

-или- Исходная последовательность пуста.

Примеры

В следующем примере кода показано, как использовать Single<TSource>(IQueryable<TSource>) для выбора единственного элемента массива.

// Create two arrays.
string[] fruits1 = { "orange" };
string[] fruits2 = { "orange", "apple" };

// Get the only item in the first array.
string fruit1 = fruits1.AsQueryable().Single();

Console.WriteLine("First query: " + fruit1);

try
{
    // Try to get the only item in the second array.
    string fruit2 = fruits2.AsQueryable().Single();
    Console.WriteLine("Second query: " + fruit2);
}
catch (System.InvalidOperationException)
{
    Console.WriteLine(
        "Second query: The collection does not contain exactly one element."
        );
}

/*
    This code produces the following output:

    First query: orange
    Second query: The collection does not contain exactly one element
*/
' Create two arrays.
Dim fruits1() As String = {"orange"}
Dim fruits2() As String = {"orange", "apple"}

' Get the only item in the first array.
Dim result As String = fruits1.AsQueryable().Single()

' Display the result.
MsgBox("First query: " & result)

Try
    ' Try to get the only item in the second array.
    Dim fruit2 As String = fruits2.AsQueryable().Single()
    MsgBox("Second query: " + fruit2)
Catch
    MsgBox("Second query: The collection does not contain exactly one element.")
End Try

' This code produces the following output:

' First query: orange
' Second query: The collection does not contain exactly one element.

Комментарии

Метод Single<TSource>(IQueryable<TSource>) создает объект MethodCallExpression , представляющий себя как Single<TSource>(IQueryable<TSource>) созданный универсальный метод. Затем он передает MethodCallExpression Execute<TResult>(Expression) метод, представленный IQueryProvider свойством Provider source параметра.

Поведение запроса, возникающее в результате выполнения дерева выражений, представляющего вызов Single<TSource>(IQueryable<TSource>) , зависит от реализации типа source параметра. Ожидаемое поведение заключается в том, что он возвращает единственный элемент в source.

Применяется к

Single<TSource>(IQueryable<TSource>, Expression<Func<TSource,Boolean>>)

Возвращает единственный элемент последовательности, удовлетворяющий указанному условию, и вызывает исключение, если таких элементов больше одного.

public:
generic <typename TSource>
[System::Runtime::CompilerServices::Extension]
 static TSource Single(System::Linq::IQueryable<TSource> ^ source, System::Linq::Expressions::Expression<Func<TSource, bool> ^> ^ predicate);
public static TSource Single<TSource> (this System.Linq.IQueryable<TSource> source, System.Linq.Expressions.Expression<Func<TSource,bool>> predicate);
static member Single : System.Linq.IQueryable<'Source> * System.Linq.Expressions.Expression<Func<'Source, bool>> -> 'Source
<Extension()>
Public Function Single(Of TSource) (source As IQueryable(Of TSource), predicate As Expression(Of Func(Of TSource, Boolean))) As TSource

Параметры типа

TSource

Тип элементов source.

Параметры

source
IQueryable<TSource>

Объект IQueryable<T>, из которого требуется возвратить единственный элемент.

predicate
Expression<Func<TSource,Boolean>>

Функция для проверки элемента на соответствие условию.

Возвращаемое значение

TSource

Единственный элемент входной последовательности, удовлетворяющий условию предиката predicate.

Исключения

Параметр source или predicate имеет значение null.

Ни один элемент не удовлетворяет условию предиката predicate.

-или- Условию предиката predicate удовлетворяет более одного элемента.

-или- Исходная последовательность пуста.

Примеры

В следующем примере кода показано, как использовать Single<TSource>(IQueryable<TSource>, Expression<Func<TSource,Boolean>>) для выбора единственного элемента массива, удовлетворяющего условию.

string[] fruits = { "apple", "banana", "mango",
                      "orange", "passionfruit", "grape" };

// Get the only string in the array whose length is greater than 10.
string fruit1 = fruits.AsQueryable().Single(fruit => fruit.Length > 10);

Console.WriteLine("First Query: " + fruit1);

try
{
    // Try to get the only string in the array
    // whose length is greater than 15.
    string fruit2 = fruits.AsQueryable().Single(fruit => fruit.Length > 15);
    Console.WriteLine("Second Query: " + fruit2);
}
catch (System.InvalidOperationException)
{
    Console.Write("Second Query: The collection does not contain ");
    Console.WriteLine("exactly one element whose length is greater than 15.");
}

/*
    This code produces the following output:

    First Query: passionfruit
    Second Query: The collection does not contain exactly one
    element whose length is greater than 15.
 */
Dim fruits() As String = _
    {"apple", "banana", "mango", "orange", "passionfruit", "grape"}

' Get the only string in the array whose length is greater than 10.
Dim result As String = _
    fruits.AsQueryable().Single(Function(fruit) fruit.Length > 10)

' Display the result.
MsgBox("First Query: " & result)

Try
    ' Try to get the only string in the array
    ' whose length is greater than 15.
    Dim fruit2 As String = fruits.AsQueryable().Single(Function(fruit) fruit.Length > 15)
    MsgBox("Second Query: " + fruit2)
Catch
    Dim text As String = "Second Query: The collection does not contain "
    text = text & "exactly one element whose length is greater than 15."
    MsgBox(text)
End Try

' This code produces the following output:

' First Query: passionfruit
' Second Query: The collection does not contain exactly one 
'   element whose length is greater than 15.

Комментарии

Этот метод имеет по крайней мере один параметр типа Expression<TDelegate> , аргумент типа которого является одним из Func<T,TResult> типов. Для этих параметров можно передать лямбда-выражение, и оно будет скомпилировано в .Expression<TDelegate>

Метод Single<TSource>(IQueryable<TSource>, Expression<Func<TSource,Boolean>>) создает объект MethodCallExpression , представляющий себя как Single<TSource>(IQueryable<TSource>, Expression<Func<TSource,Boolean>>) созданный универсальный метод. Затем он передает MethodCallExpression Execute<TResult>(Expression) метод, представленный IQueryProvider свойством Provider source параметра.

Поведение запроса, возникающее в результате выполнения дерева выражений, представляющего вызов Single<TSource>(IQueryable<TSource>, Expression<Func<TSource,Boolean>>) , зависит от реализации типа source параметра. Ожидаемое поведение заключается в том, что он возвращает единственный элемент, source удовлетворяющий условию, заданному параметром predicate.

Применяется к