Queryable.SingleOrDefault Queryable.SingleOrDefault Queryable.SingleOrDefault Queryable.SingleOrDefault Method

Definizione

Restituisce un singolo elemento specifico di una sequenza o un valore predefinito se tale elemento non viene trovato.Returns a single, specific element of a sequence, or a default value if no such element is found.

Overload

SingleOrDefault<TSource>(IQueryable<TSource>) SingleOrDefault<TSource>(IQueryable<TSource>) SingleOrDefault<TSource>(IQueryable<TSource>) SingleOrDefault<TSource>(IQueryable<TSource>)

Restituisce il singolo elemento di una sequenza o un valore predefinito se la sequenza è vuota. Questo metodo genera un'eccezione se esiste più di un elemento nella sequenza.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>>) SingleOrDefault<TSource>(IQueryable<TSource>, Expression<Func<TSource,Boolean>>) SingleOrDefault<TSource>(IQueryable<TSource>, Expression<Func<TSource,Boolean>>) SingleOrDefault<TSource>(IQueryable<TSource>, Expression<Func<TSource,Boolean>>)

Restituisce l'unico elemento di una sequenza che soddisfa una condizione specificata o un valore predefinito se tale elemento esiste. Questo metodo genera un'eccezione se più di un elemento soddisfa la condizione.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>) SingleOrDefault<TSource>(IQueryable<TSource>) SingleOrDefault<TSource>(IQueryable<TSource>) SingleOrDefault<TSource>(IQueryable<TSource>)

Restituisce il singolo elemento di una sequenza o un valore predefinito se la sequenza è vuota. Questo metodo genera un'eccezione se esiste più di un elemento nella sequenza.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);
static member SingleOrDefault : System.Linq.IQueryable<'Source> -> 'Source
<Extension()>
Public Function SingleOrDefault(Of TSource) (source As IQueryable(Of TSource)) As TSource

Parametri di tipo

TSource

Tipo degli elementi di source.The type of the elements of source.

Parametri

source
IQueryable<TSource>

Oggetto IQueryable<T> di cui restituire il singolo elemento.An IQueryable<T> to return the single element of.

Restituisce

TSource TSource TSource TSource

Singolo elemento della sequenza di input o default(TSource) se la sequenza non contiene elementi.The single element of the input sequence, or default(TSource) if the sequence contains no elements.

Eccezioni

source presenta più di un elemento.source has more than one element.

Esempi

Nell'esempio di codice riportato di seguito viene SingleOrDefault<TSource>(IQueryable<TSource>) illustrato come utilizzare per selezionare l'unico elemento di una matrice.The following code example demonstrates how to use SingleOrDefault<TSource>(IQueryable<TSource>) to select the only element of an array. La seconda query dimostra che SingleOrDefault<TSource>(IQueryable<TSource>) restituisce un valore predefinito quando la sequenza non contiene esattamente un elemento.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!

In alcuni casi il default(TSource) valore di non è il valore predefinito che si desidera utilizzare se la raccolta non contiene elementi.Sometimes the value of default(TSource) is not the default value that you want to use if the collection contains no elements. Anziché controllare il risultato per il valore predefinito indesiderato e quindi modificarlo se necessario, è possibile usare DefaultIfEmpty<TSource>(IQueryable<TSource>, TSource) il metodo per specificare il valore predefinito che si vuole usare se la raccolta è vuota.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. Quindi, chiamare Single<TSource>(IQueryable<TSource>) per ottenere l'elemento.Then, call Single<TSource>(IQueryable<TSource>) to obtain the element. Nell'esempio di codice seguente vengono utilizzate entrambe le tecniche per ottenere un valore predefinito di 1 se una raccolta di numeri di pagina è vuota.The following code example uses both techniques to obtain a default value of 1 if a collection of page numbers is empty. Poiché il valore predefinito per un valore integer è 0, che in genere non è un numero di pagina valido, il valore predefinito deve essere impostato su 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. Una volta completata la query, viene verificata la presenza di un valore predefinito indesiderato per la prima variabile di risultato.The first result variable is checked for the unwanted default value after the query is completed. La seconda variabile di risultato viene ottenuta DefaultIfEmpty<TSource>(IQueryable<TSource>, TSource) chiamando per specificare il valore predefinito 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

Commenti

Il SingleOrDefault<TSource>(IQueryable<TSource>) metodo genera un MethodCallExpression oggetto che rappresenta SingleOrDefault<TSource>(IQueryable<TSource>) la chiamata a se stesso come metodo generico costruito.The SingleOrDefault<TSource>(IQueryable<TSource>) method generates a MethodCallExpression that represents calling SingleOrDefault<TSource>(IQueryable<TSource>) itself as a constructed generic method. Passa MethodCallExpression IQueryProvider quindi al source metodo dell'oggetto rappresentato dalla proprietàdelparametro.Provider Execute<TResult>(Expression)It then passes the MethodCallExpression to the Execute<TResult>(Expression) method of the IQueryProvider represented by the Provider property of the source parameter.

Il comportamento della query che si verifica in seguito all'esecuzione di un albero delle espressioni che SingleOrDefault<TSource>(IQueryable<TSource>) rappresenta la chiamata dipende dall'implementazione del tipo source di parametro.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. Il comportamento previsto è che restituisce l'unico elemento in sourceo un valore predefinito se source è vuoto.The expected behavior is that it returns the only element in source, or a default value if source is empty.

Il SingleOrDefault metodo non fornisce un modo per specificare un valore predefinito.The SingleOrDefault method does not provide a way to specify a default value. Se si desidera specificare un valore predefinito diverso da default(TSource), utilizzare il DefaultIfEmpty<TSource>(IQueryable<TSource>, TSource) metodo come descritto nella sezione di esempio.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.

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

Restituisce l'unico elemento di una sequenza che soddisfa una condizione specificata o un valore predefinito se tale elemento esiste. Questo metodo genera un'eccezione se più di un elemento soddisfa la condizione.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);
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

Parametri di tipo

TSource

Tipo degli elementi di source.The type of the elements of source.

Parametri

source
IQueryable<TSource>

Un oggetto IQueryable<T> dal quale restituire un singolo elemento.An IQueryable<T> to return a single element from.

predicate
Expression<Func<TSource,Boolean>>

Funzione per testare un elemento per una condizione.A function to test an element for a condition.

Restituisce

TSource TSource TSource TSource

Singolo elemento della sequenza di input che soddisfa la condizione in predicate o default(TSource) se tale elemento non viene trovato.The single element of the input sequence that satisfies the condition in predicate, or default(TSource) if no such element is found.

Eccezioni

source o predicate è null.source or predicate is null.

Più di un elemento soddisfa la condizione in predicate.More than one element satisfies the condition in predicate.

Esempi

Nell'esempio di codice riportato di seguito viene SingleOrDefault<TSource>(IQueryable<TSource>, Expression<Func<TSource,Boolean>>) illustrato come utilizzare per selezionare l'unico elemento di una matrice che soddisfa una condizione.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. La seconda query dimostra che SingleOrDefault<TSource>(IQueryable<TSource>, Expression<Func<TSource,Boolean>>) restituisce un valore predefinito quando la sequenza non contiene esattamente un elemento che soddisfa la condizione.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!

Commenti

Questo metodo ha almeno un parametro di tipo Expression<TDelegate> il Func<T,TResult> cui argomento di tipo è uno dei tipi.This method has at least one parameter of type Expression<TDelegate> whose type argument is one of the Func<T,TResult> types. Per questi parametri, è possibile passare un'espressione lambda che verrà compilata in un oggetto Expression<TDelegate>.For these parameters, you can pass in a lambda expression and it will be compiled to an Expression<TDelegate>.

Il SingleOrDefault<TSource>(IQueryable<TSource>, Expression<Func<TSource,Boolean>>) metodo genera un MethodCallExpression oggetto che rappresenta SingleOrDefault<TSource>(IQueryable<TSource>, Expression<Func<TSource,Boolean>>) la chiamata a se stesso come metodo generico costruito.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. Passa MethodCallExpression IQueryProvider quindi al source metodo dell'oggetto rappresentato dalla proprietàdelparametro.Provider Execute<TResult>(Expression)It then passes the MethodCallExpression to the Execute<TResult>(Expression) method of the IQueryProvider represented by the Provider property of the source parameter.

Il comportamento della query che si verifica in seguito all'esecuzione di un albero delle espressioni che SingleOrDefault<TSource>(IQueryable<TSource>, Expression<Func<TSource,Boolean>>) rappresenta la chiamata dipende dall'implementazione del tipo source di parametro.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. Il comportamento previsto è che restituisce l'unico elemento in source che soddisfa la condizione specificata da predicateo un valore predefinito se tale elemento non esiste.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.

Si applica a