Queryable.SingleOrDefault Metoda

Definicja

Zwraca pojedynczy, konkretny element sekwencji lub wartość domyślną, jeśli nie można znaleźć takiego elementu.Returns a single, specific element of a sequence, or a default value if no such element is found.

Przeciążenia

SingleOrDefault<TSource>(IQueryable<TSource>)

Zwraca jedyny element sekwencji lub wartość domyślną, jeśli sekwencja jest pusta. Ta metoda zgłasza wyjątek, jeśli w sekwencji występuje więcej niż jeden element.Returns the only element of a sequence, or a default value if the sequence is empty; this method throws an exception if there is more than one element in the sequence.

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

Zwraca jedyny element sekwencji, który spełnia określony warunek lub wartość domyślną, jeśli taki element nie istnieje; Ta metoda zgłasza wyjątek, jeśli więcej niż jeden element spełnia warunek.Returns the only element of a sequence that satisfies a specified condition or a default value if no such element exists; this method throws an exception if more than one element satisfies the condition.

SingleOrDefault<TSource>(IQueryable<TSource>)

Zwraca jedyny element sekwencji lub wartość domyślną, jeśli sekwencja jest pusta. Ta metoda zgłasza wyjątek, jeśli w sekwencji występuje więcej niż jeden element.Returns the only element of a sequence, or a default value if the sequence is empty; this method throws an exception if there is more than one element in the sequence.

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

Parametry typu

TSource

Typ elementów source .The type of the elements of source.

Parametry

source
IQueryable<TSource>

IQueryable<T>Do zwrócenia pojedynczego elementu.An IQueryable<T> to return the single element of.

Zwraca

TSource

Pojedynczy element sekwencji wejściowej lub default( TSource ), jeśli sekwencja nie zawiera żadnych elementów.The single element of the input sequence, or default(TSource) if the sequence contains no elements.

Wyjątki

source to null.source is null.

source ma więcej niż jeden element.source has more than one element.

Przykłady

Poniższy przykład kodu demonstruje, jak używać SingleOrDefault<TSource>(IQueryable<TSource>) do wybierania tylko elementu tablicy.The following code example demonstrates how to use SingleOrDefault<TSource>(IQueryable<TSource>) to select the only element of an array. Drugie zapytanie pokazuje, że SingleOrDefault<TSource>(IQueryable<TSource>) zwraca wartość domyślną, gdy sekwencja nie zawiera dokładnie jednego elementu.The second query demonstrates that SingleOrDefault<TSource>(IQueryable<TSource>) returns a default value when the sequence does not contain exactly one element.

// Create two arrays. The second is empty.
string[] fruits1 = { "orange" };
string[] fruits2 = { };

// Get the only item in the first array, or else
// the default value for type string (null).
string fruit1 = fruits1.AsQueryable().SingleOrDefault();
Console.WriteLine("First Query: " + fruit1);

// Get the only item in the second array, or else
// the default value for type string (null).
string fruit2 = fruits2.AsQueryable().SingleOrDefault();
Console.WriteLine("Second Query: " +
    (String.IsNullOrEmpty(fruit2) ? "No such string!" : fruit2));

/*
    This code produces the following output:

    First Query: orange
    Second Query: No such string!
*/
' Create two arrays. The second is empty.
Dim fruits1() As String = {"orange"}
Dim fruits2() As String = {}

' Get the only item in the first array, or else
' the default value for type string (null).
Dim fruit1 As String = fruits1.AsQueryable().SingleOrDefault()
MsgBox("First Query: " + fruit1)

' Get the only item in the second array, or else
' the default value for type string (null). 
Dim fruit2 As String = fruits2.AsQueryable().SingleOrDefault()
MsgBox("Second Query: " & _
    IIf(String.IsNullOrEmpty(fruit2), "No such string!", fruit2))

' This code produces the following output:

' First Query: orange
' Second Query: No such string!

Czasami wartość default(TSource) nie jest wartością domyślną, która ma być używana, jeśli kolekcja nie zawiera żadnych elementów.Sometimes the value of default(TSource) is not the default value that you want to use if the collection contains no elements. Zamiast sprawdzać wynik niepożądanej wartości domyślnej, a następnie zmieniać ją w razie potrzeby, można użyć metody, DefaultIfEmpty<TSource>(IQueryable<TSource>, TSource) Aby określić wartość domyślną, która ma być używana, jeśli kolekcja jest pusta.Instead of checking the result for the unwanted default value and then changing it if necessary, you can use the DefaultIfEmpty<TSource>(IQueryable<TSource>, TSource) method to specify the default value that you want to use if the collection is empty. Następnie należy wywołać, Single<TSource>(IQueryable<TSource>) Aby uzyskać element.Then, call Single<TSource>(IQueryable<TSource>) to obtain the element. Poniższy przykład kodu używa obu technik do uzyskania wartości domyślnej 1, jeśli kolekcja numerów stron jest pusta.The following code example uses both techniques to obtain a default value of 1 if a collection of page numbers is empty. Ponieważ wartością domyślną dla liczby całkowitej jest 0, która nie jest zazwyczaj prawidłowym numerem strony, wartość domyślna musi być określona jako 1.Because the default value for an integer is 0, which is not usually a valid page number, the default value must be specified as 1 instead. Pierwsza zmienna wynikowa jest sprawdzana pod kątem niepożądanej wartości domyślnej po zakończeniu zapytania.The first result variable is checked for the unwanted default value after the query is completed. Druga zmienna wynikowa jest uzyskiwana przez wywołanie, DefaultIfEmpty<TSource>(IQueryable<TSource>, TSource) Aby określić wartość domyślną 1.The second result variable is obtained by calling DefaultIfEmpty<TSource>(IQueryable<TSource>, TSource) to specify a default value of 1.

int[] pageNumbers = { };

// Setting the default value to 1 after the query.
int pageNumber1 = pageNumbers.AsQueryable().SingleOrDefault();
if (pageNumber1 == 0)
{
    pageNumber1 = 1;
}
Console.WriteLine("The value of the pageNumber1 variable is {0}", pageNumber1);

// Setting the default value to 1 by using DefaultIfEmpty() in the query.
int pageNumber2 = pageNumbers.AsQueryable().DefaultIfEmpty(1).Single();
Console.WriteLine("The value of the pageNumber2 variable is {0}", pageNumber2);

/*
 This code produces the following output:

 The value of the pageNumber1 variable is 1
 The value of the pageNumber2 variable is 1
*/
Dim pageNumbers() As Integer = {}

' Setting the default value to 1 after the query.
Dim pageNumber1 As Integer = pageNumbers.AsQueryable().SingleOrDefault()
If pageNumber1 = 0 Then
    pageNumber1 = 1
End If
MsgBox(String.Format("The value of the pageNumber1 variable is {0}", pageNumber1))

' Setting the default value to 1 by using DefaultIfEmpty() in the query.
Dim pageNumber2 As Integer = pageNumbers.AsQueryable().DefaultIfEmpty(1).Single()
MsgBox(String.Format("The value of the pageNumber2 variable is {0}", pageNumber2))

' This code produces the following output:

' The value of the pageNumber1 variable is 1
' The value of the pageNumber2 variable is 1

Uwagi

SingleOrDefault<TSource>(IQueryable<TSource>)Metoda generuje element MethodCallExpression reprezentujący wywoływanie SingleOrDefault<TSource>(IQueryable<TSource>) jako metodę rodzajową.The SingleOrDefault<TSource>(IQueryable<TSource>) method generates a MethodCallExpression that represents calling SingleOrDefault<TSource>(IQueryable<TSource>) itself as a constructed generic method. Następnie przekazuje MethodCallExpression do Execute<TResult>(Expression) metody IQueryProvider reprezentowanej przez Provider Właściwość source parametru.It then passes the MethodCallExpression to the Execute<TResult>(Expression) method of the IQueryProvider represented by the Provider property of the source parameter.

Zachowanie zapytania, które występuje w wyniku wykonania drzewa wyrażenia, które reprezentuje wywołanie, SingleOrDefault<TSource>(IQueryable<TSource>) zależy od implementacji typu source parametru.The query behavior that occurs as a result of executing an expression tree that represents calling SingleOrDefault<TSource>(IQueryable<TSource>) depends on the implementation of the type of the source parameter. Oczekiwane zachowanie polega na tym, że zwraca tylko element w source lub wartość domyślną, jeśli source jest pusty.The expected behavior is that it returns the only element in source, or a default value if source is empty.

SingleOrDefaultMetoda nie pozwala na określenie wartości domyślnej.The SingleOrDefault method does not provide a way to specify a default value. Jeśli chcesz określić wartość domyślną inną niż default(TSource) , użyj DefaultIfEmpty<TSource>(IQueryable<TSource>, TSource) metody opisanej w sekcji przykład.If you want to specify a default value other than default(TSource), use the DefaultIfEmpty<TSource>(IQueryable<TSource>, TSource) method as described in the Example section.

Dotyczy

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

Zwraca jedyny element sekwencji, który spełnia określony warunek lub wartość domyślną, jeśli taki element nie istnieje; Ta metoda zgłasza wyjątek, jeśli więcej niż jeden element spełnia warunek.Returns the only element of a sequence that satisfies a specified condition or a default value if no such element exists; this method throws an exception if more than one element satisfies the condition.

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

Parametry typu

TSource

Typ elementów source .The type of the elements of source.

Parametry

source
IQueryable<TSource>

IQueryable<T>Do zwrócenia pojedynczego elementu z.An IQueryable<T> to return a single element from.

predicate
Expression<Func<TSource,Boolean>>

Funkcja do testowania elementu dla warunku.A function to test an element for a condition.

Zwraca

TSource

Pojedynczy element sekwencji wejściowej, który spełnia warunek w predicate , lub default(), TSource Jeśli taki element nie zostanie znaleziony.The single element of the input sequence that satisfies the condition in predicate, or default(TSource) if no such element is found.

Wyjątki

source lub predicate jest null .source or predicate is null.

Więcej niż jeden element spełnia warunek w predicate .More than one element satisfies the condition in predicate.

Przykłady

Poniższy przykład kodu demonstruje, jak używać SingleOrDefault<TSource>(IQueryable<TSource>, Expression<Func<TSource,Boolean>>) do wybierania tylko elementu tablicy, który spełnia warunek.The following code example demonstrates how to use SingleOrDefault<TSource>(IQueryable<TSource>, Expression<Func<TSource,Boolean>>) to select the only element of an array that satisfies a condition. Drugie zapytanie pokazuje, że SingleOrDefault<TSource>(IQueryable<TSource>, Expression<Func<TSource,Boolean>>) zwraca wartość domyślną, gdy sekwencja nie zawiera dokładnie jednego elementu, który spełnia warunek.The second query demonstrates that SingleOrDefault<TSource>(IQueryable<TSource>, Expression<Func<TSource,Boolean>>) returns a default value when the sequence does not contain exactly one element that satisfies the condition.

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

// Get the single string in the array whose length is greater
// than 10, or else the default value for type string (null).
string fruit1 =
    fruits.AsQueryable().SingleOrDefault(fruit => fruit.Length > 10);
Console.WriteLine("First Query: " + fruit1);

// Get the single string in the array whose length is greater
// than 15, or else the default value for type string (null).
string fruit2 =
   fruits.AsQueryable().SingleOrDefault(fruit => fruit.Length > 15);
Console.WriteLine("Second Query: " +
    (String.IsNullOrEmpty(fruit2) ? "No such string!" : fruit2));

/*
    This code produces the following output:

    First Query: passionfruit
    Second Query: No such string!
*/
Dim fruits() As String = _
    {"apple", "banana", "mango", "orange", "passionfruit", "grape"}

' Get the single string in the array whose length is greater
' than 10, or else the default value for type string (null).
Dim fruit1 As String = _
    fruits.AsQueryable().SingleOrDefault(Function(fruit) fruit.Length > 10)
' Display the result.
MsgBox("First Query: " & fruit1)

' Get the single string in the array whose length is greater
' than 15, or else the default value for type string (null).
Dim fruit2 As String = _
    fruits.AsQueryable().SingleOrDefault(Function(fruit) fruit.Length > 15)
MsgBox("Second Query: " & _
    IIf(String.IsNullOrEmpty(fruit2), "No such string!", fruit2))

' This code produces the following output:

' First Query: passionfruit
' Second Query: No such string!

Uwagi

Ta metoda ma co najmniej jeden parametr typu Expression<TDelegate> , którego argument typu jest jednym z Func<T,TResult> typów.This method has at least one parameter of type Expression<TDelegate> whose type argument is one of the Func<T,TResult> types. Dla tych parametrów można przekazać wyrażenie lambda i zostanie ono skompilowane do Expression<TDelegate> .For these parameters, you can pass in a lambda expression and it will be compiled to an Expression<TDelegate>.

SingleOrDefault<TSource>(IQueryable<TSource>, Expression<Func<TSource,Boolean>>)Metoda generuje element MethodCallExpression reprezentujący wywoływanie SingleOrDefault<TSource>(IQueryable<TSource>, Expression<Func<TSource,Boolean>>) jako metodę rodzajową.The SingleOrDefault<TSource>(IQueryable<TSource>, Expression<Func<TSource,Boolean>>) method generates a MethodCallExpression that represents calling SingleOrDefault<TSource>(IQueryable<TSource>, Expression<Func<TSource,Boolean>>) itself as a constructed generic method. Następnie przekazuje MethodCallExpression do Execute<TResult>(Expression) metody IQueryProvider reprezentowanej przez Provider Właściwość source parametru.It then passes the MethodCallExpression to the Execute<TResult>(Expression) method of the IQueryProvider represented by the Provider property of the source parameter.

Zachowanie zapytania, które występuje w wyniku wykonania drzewa wyrażenia, które reprezentuje wywołanie, SingleOrDefault<TSource>(IQueryable<TSource>, Expression<Func<TSource,Boolean>>) zależy od implementacji typu source parametru.The query behavior that occurs as a result of executing an expression tree that represents calling SingleOrDefault<TSource>(IQueryable<TSource>, Expression<Func<TSource,Boolean>>) depends on the implementation of the type of the source parameter. Oczekiwane zachowanie polega na tym, że zwraca tylko element w source , który spełnia warunek określony przez predicate , lub wartość domyślną, jeśli taki element nie istnieje.The expected behavior is that it returns the only element in source that satisfies the condition specified by predicate, or a default value if no such element exists.

Dotyczy