Questo articolo è stato tradotto automaticamente. Per visualizzare l'articolo in inglese, selezionare la casella di controllo Inglese. È possibile anche visualizzare il testo inglese in una finestra popup posizionando il puntatore del mouse sopra il testo.
Traduzione
Inglese

Metodo Queryable.SingleOrDefault<TSource>(IQueryable<TSource>)

 

Data di pubblicazione: ottobre 2016

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.

Spazio dei nomi:   System.Linq
Assembly:  System.Core (in System.Core.dll)

public static TSource SingleOrDefault<TSource>(
	this IQueryable<TSource> source
)

Parametri

source
Type: System.Linq.IQueryable<TSource>

Un IQueryable<T> per restituire il singolo elemento.

Valore restituito

Type: TSource

Il singolo elemento della sequenza di input, o default(TSource) se la sequenza non contiene elementi.

Parametri tipo

TSource

Tipo degli elementi di source.

Exception Condition
ArgumentNullException

source è null.

InvalidOperationException

source dispone di più di un elemento.

Il SingleOrDefault<TSource>(IQueryable<TSource>) metodo genera un MethodCallExpression che rappresenta una chiamata SingleOrDefault<TSource>(IQueryable<TSource>) stesso come un metodo generico costruito. Passa quindi il MethodCallExpression per il Execute<TResult>(Expression) metodo il IQueryProvider rappresentato dal Provider proprietà del source parametro.

Il comportamento della query che si verifica in seguito all'esecuzione di una struttura ad albero dell'espressione che rappresenta una chiamata SingleOrDefault<TSource>(IQueryable<TSource>) dipende dall'implementazione del tipo di source parametro. Il comportamento previsto è che restituisce il singolo elemento source, o un valore predefinito se source è vuoto.

Il SingleOrDefault metodo non fornisce un modo per specificare un valore predefinito. Se si desidera specificare un valore predefinito diverso da default(TSource), utilizzare il DefaultIfEmpty<TSource>(IQueryable<TSource>, TSource) metodo come descritto nella sezione esempio.

Esempio di codice seguente viene illustrato come utilizzare SingleOrDefault<TSource>(IQueryable<TSource>) per selezionare l'unico elemento di 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!
*/

In alcuni casi il valore di default(TSource) non è il valore predefinito che si desidera utilizzare se la raccolta non contiene elementi. Anziché verificare il risultato per il valore predefinito non desiderato e quindi modificarlo se necessario, è possibile utilizzare il DefaultIfEmpty<TSource>(IQueryable<TSource>, TSource) per specificare il valore predefinito che si desidera utilizzare se la raccolta è vuota. Quindi, chiamare Single<TSource>(IQueryable<TSource>) per ottenere l'elemento. Esempio di codice seguente utilizza entrambe le tecniche per ottenere un valore predefinito di 1, se un insieme di numeri di pagina è vuoto. Poiché il valore predefinito per un numero intero è 0, che non è in genere un numero di pagina valido, il valore predefinito deve specificato come 1. La prima variabile di risultato viene verificata per il valore predefinito non desiderato dopo il completamento della query. La seconda variabile del risultato viene ottenuta chiamando DefaultIfEmpty<TSource>(IQueryable<TSource>, TSource) per specificare un valore predefinito di 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
*/

Universal Windows Platform
Disponibile da 8
.NET Framework
Disponibile da 3.5
Libreria di classi portabile
Supportato in: piattaforme .NET portabili
Silverlight
Disponibile da 2.0
Windows Phone Silverlight
Disponibile da 7.1
Windows Phone
Disponibile da 8.1
Torna all'inizio
Mostra: