Queryable.SingleOrDefault Metodo
Definizione
Importante
Alcune informazioni sono relative alla release non definitiva del prodotto, che potrebbe subire modifiche significative prima della release definitiva. Microsoft non riconosce alcuna garanzia, espressa o implicita, in merito alle informazioni qui fornite.
Restituisce un singolo elemento specifico di una sequenza o un valore predefinito se non viene trovato alcun elemento di questo tipo.
Overload
SingleOrDefault<TSource>(IQueryable<TSource>, TSource) |
Restituisce l'unico elemento di una sequenza o un valore predefinito se la sequenza è vuota; questo metodo genera un'eccezione se nella sequenza sono presenti più elementi. |
SingleOrDefault<TSource>(IQueryable<TSource>, Expression<Func<TSource,Boolean>>, TSource) |
Restituisce l'unico elemento di una sequenza che soddisfa una condizione specificata o un valore predefinito se tale elemento non esiste; questo metodo genera un'eccezione se più di un elemento soddisfa la condizione. |
SingleOrDefault<TSource>(IQueryable<TSource>) |
Restituisce l'unico elemento di una sequenza o un valore predefinito se la sequenza è vuota; questo metodo genera un'eccezione se nella sequenza sono presenti più elementi. |
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 non esiste; questo metodo genera un'eccezione se più di un elemento soddisfa la condizione. |
SingleOrDefault<TSource>(IQueryable<TSource>, TSource)
- Origine:
- Queryable.cs
- Origine:
- Queryable.cs
- Origine:
- Queryable.cs
Restituisce l'unico elemento di una sequenza o un valore predefinito se la sequenza è vuota; questo metodo genera un'eccezione se nella sequenza sono presenti più elementi.
public:
generic <typename TSource>
[System::Runtime::CompilerServices::Extension]
static TSource SingleOrDefault(System::Linq::IQueryable<TSource> ^ source, TSource defaultValue);
public static TSource SingleOrDefault<TSource> (this System.Linq.IQueryable<TSource> source, TSource defaultValue);
static member SingleOrDefault : System.Linq.IQueryable<'Source> * 'Source -> 'Source
<Extension()>
Public Function SingleOrDefault(Of TSource) (source As IQueryable(Of TSource), defaultValue As TSource) As TSource
Parametri di tipo
- TSource
Tipo degli elementi di source
.
Parametri
- source
- IQueryable<TSource>
Oggetto IEnumerable<T> per restituire il singolo elemento di .
- defaultValue
- TSource
Valore predefinito da restituire se la sequenza è vuota.
Restituisce
Singolo elemento della sequenza di input o defaultValue
se la sequenza non contiene elementi.
Eccezioni
source
è null
.
La sequenza di input contiene più di un elemento.
Si applica a
SingleOrDefault<TSource>(IQueryable<TSource>, Expression<Func<TSource,Boolean>>, TSource)
- Origine:
- Queryable.cs
- Origine:
- Queryable.cs
- Origine:
- Queryable.cs
Restituisce l'unico elemento di una sequenza che soddisfa una condizione specificata o un valore predefinito se tale elemento non esiste; questo metodo genera un'eccezione se più di un elemento soddisfa la condizione.
public:
generic <typename TSource>
[System::Runtime::CompilerServices::Extension]
static TSource SingleOrDefault(System::Linq::IQueryable<TSource> ^ source, System::Linq::Expressions::Expression<Func<TSource, bool> ^> ^ predicate, TSource defaultValue);
public static TSource SingleOrDefault<TSource> (this System.Linq.IQueryable<TSource> source, System.Linq.Expressions.Expression<Func<TSource,bool>> predicate, TSource defaultValue);
static member SingleOrDefault : System.Linq.IQueryable<'Source> * System.Linq.Expressions.Expression<Func<'Source, bool>> * 'Source -> 'Source
<Extension()>
Public Function SingleOrDefault(Of TSource) (source As IQueryable(Of TSource), predicate As Expression(Of Func(Of TSource, Boolean)), defaultValue As TSource) As TSource
Parametri di tipo
- TSource
Tipo degli elementi di source
.
Parametri
- source
- IQueryable<TSource>
Oggetto IEnumerable<T> da cui restituire un singolo elemento.
- predicate
- Expression<Func<TSource,Boolean>>
Funzione per testare un elemento per una condizione.
- defaultValue
- TSource
Valore predefinito da restituire se la sequenza è vuota.
Restituisce
Singolo elemento della sequenza di input che soddisfa la condizione o defaultValue
se non viene trovato alcun elemento di questo tipo.
Eccezioni
source
o predicate
è null
.
Più di un elemento soddisfa la condizione in predicate
.
Si applica a
SingleOrDefault<TSource>(IQueryable<TSource>)
- Origine:
- Queryable.cs
- Origine:
- Queryable.cs
- Origine:
- Queryable.cs
Restituisce l'unico elemento di una sequenza o un valore predefinito se la sequenza è vuota; questo metodo genera un'eccezione se nella sequenza sono presenti più elementi.
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
Parametri di tipo
- TSource
Tipo degli elementi di source
.
Parametri
- source
- IQueryable<TSource>
Oggetto IQueryable<T> per restituire il singolo elemento di .
Restituisce
Singolo elemento della sequenza di input o default
(TSource
) se la sequenza non contiene elementi.
Eccezioni
source
è null
.
source
ha più di un elemento.
Esempio
Nell'esempio di codice seguente viene illustrato come usare SingleOrDefault<TSource>(IQueryable<TSource>) per selezionare l'unico elemento di una matrice. La seconda query dimostra che SingleOrDefault<TSource>(IQueryable<TSource>) restituisce un valore predefinito quando la sequenza non contiene esattamente un elemento.
// 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!
A volte il valore di default(TSource)
non è il valore predefinito che si desidera utilizzare se la raccolta non contiene elementi. Anziché controllare il risultato per il valore predefinito indesiderato e modificarlo, se necessario, è possibile utilizzare il metodo DefaultIfEmpty<TSource>(IQueryable<TSource>, TSource) per specificare il valore predefinito che si desidera utilizzare se la raccolta è vuota. Chiamare quindi Single<TSource>(IQueryable<TSource>) per ottenere l'elemento . Nell'esempio di codice seguente vengono utilizzate entrambe le tecniche per ottenere un valore predefinito pari a 1 se una raccolta di numeri di pagina è vuota. Poiché il valore predefinito per un numero intero è 0, che in genere non è un numero di pagina valido, il valore predefinito deve essere specificato come 1. La prima variabile di risultato viene verificata per il valore predefinito indesiderato dopo il completamento della query. La seconda variabile di risultato viene ottenuta chiamando DefaultIfEmpty<TSource>(IQueryable<TSource>, TSource) per specificare il valore predefinito 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 metodo SingleOrDefault<TSource>(IQueryable<TSource>) genera un MethodCallExpression che rappresenta la chiamata SingleOrDefault<TSource>(IQueryable<TSource>) stessa come metodo generico costruito. Passa quindi il MethodCallExpression al metodo Execute<TResult>(Expression) del IQueryProvider rappresentato dalla proprietà Provider del parametro source
.
Il comportamento della query che si verifica in seguito all'esecuzione di un albero delle espressioni che rappresenta la chiamata SingleOrDefault<TSource>(IQueryable<TSource>) dipende dall'implementazione del tipo del parametro source
. Il comportamento previsto è che restituisce l'unico elemento in source
o un valore predefinito se source
è vuoto.
Il metodo SingleOrDefault non consente di specificare un valore predefinito. Se si desidera specificare un valore predefinito diverso da default(TSource)
, usare il metodo DefaultIfEmpty<TSource>(IQueryable<TSource>, TSource) come descritto nella sezione Example.
Si applica a
SingleOrDefault<TSource>(IQueryable<TSource>, Expression<Func<TSource,Boolean>>)
- Origine:
- Queryable.cs
- Origine:
- Queryable.cs
- Origine:
- Queryable.cs
Restituisce l'unico elemento di una sequenza che soddisfa una condizione specificata o un valore predefinito se tale elemento non esiste; questo metodo genera un'eccezione se più di un elemento soddisfa la condizione.
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
Parametri di tipo
- TSource
Tipo degli elementi di source
.
Parametri
- source
- IQueryable<TSource>
Oggetto IQueryable<T> da cui restituire un singolo elemento.
- predicate
- Expression<Func<TSource,Boolean>>
Funzione per testare un elemento per una condizione.
Restituisce
Singolo elemento della sequenza di input che soddisfa la condizione in predicate
o default
(TSource
) se non viene trovato alcun elemento di questo tipo.
Eccezioni
source
o predicate
è null
.
Più di un elemento soddisfa la condizione in predicate
.
Esempio
Nell'esempio di codice seguente viene illustrato come usare SingleOrDefault<TSource>(IQueryable<TSource>, Expression<Func<TSource,Boolean>>) per selezionare l'unico elemento di una matrice che soddisfa una condizione. 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.
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 cui argomento di tipo è uno dei tipi di Func<T,TResult>. Per questi parametri, è possibile passare un'espressione lambda e verrà compilata in un Expression<TDelegate>.
Il metodo SingleOrDefault<TSource>(IQueryable<TSource>, Expression<Func<TSource,Boolean>>) genera un MethodCallExpression che rappresenta la chiamata SingleOrDefault<TSource>(IQueryable<TSource>, Expression<Func<TSource,Boolean>>) stessa come metodo generico costruito. Passa quindi il MethodCallExpression al metodo Execute<TResult>(Expression) del IQueryProvider rappresentato dalla proprietà Provider del parametro source
.
Il comportamento della query che si verifica in seguito all'esecuzione di un albero delle espressioni che rappresenta la chiamata SingleOrDefault<TSource>(IQueryable<TSource>, Expression<Func<TSource,Boolean>>) dipende dall'implementazione del tipo del parametro source
. Il comportamento previsto è che restituisce l'unico elemento in source
che soddisfa la condizione specificata da predicate
o un valore predefinito se tale elemento non esiste.