Dieser Artikel wurde maschinell übersetzt. Wenn Sie die englische Version des Artikels anzeigen möchten, aktivieren Sie das Kontrollkästchen Englisch. Sie können den englischen Text auch in einem Popupfenster anzeigen, indem Sie den Mauszeiger über den Text bewegen.
Übersetzung
Englisch

Queryable.SingleOrDefault<TSource>-Methode: (IQueryable<TSource>)

 

Veröffentlicht: Oktober 2016

Gibt das einzige Element einer Sequenz bzw. einen Standardwert zurück, wenn die Sequenz leer ist. Diese Methode löst eine Ausnahme aus, wenn mehr als ein Element in der Sequenz vorhanden ist.

Namespace:   System.Linq
Assembly:  System.Core (in System.Core.dll)

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

Parameter

source
Type: System.Linq.IQueryable<TSource>

Ein IQueryable<T> dessen einzige Element zurückgegeben.

Rückgabewert

Type: TSource

Das einzige Element der Eingabesequenz oder default(TSource), wenn die Sequenz keine Elemente enthält.

Typparameter

TSource

Der Typ der Elemente von source.

Exception Condition
ArgumentNullException

source ist null.

InvalidOperationException

source verfügt über mehr als ein Element.

Die SingleOrDefault<TSource>(IQueryable<TSource>) -Methode generiert eine MethodCallExpression Aufruf darstellt SingleOrDefault<TSource>(IQueryable<TSource>) sich selbst als konstruierte generische Methode. Anschließend übergibt der MethodCallExpression zu der Execute<TResult>(Expression) Methode der IQueryProvider durch dargestellt die Provider Eigenschaft der source Parameter.

Das Abfrageverhalten durch das Ausführen einer Ausdrucksbaumstruktur, die aufrufende darstellt, SingleOrDefault<TSource>(IQueryable<TSource>) hängt von der Implementierung des Typs der source Parameter. Das erwartete Verhalten ist das einzige Element im zurück source, oder ein Standardwert, wenn source ist leer.

Die SingleOrDefault Methode bietet keine Möglichkeit, einen Standardwert anzugeben. Wenn Sie als einen Standardwert angeben möchten default(TSource), verwenden Sie die DefaultIfEmpty<TSource>(IQueryable<TSource>, TSource) Methode, wie im Beispielabschnitt beschrieben.

Im folgenden Codebeispiel wird veranschaulicht, wie Sie SingleOrDefault<TSource>(IQueryable<TSource>) das einzige Element eines Arrays auswählen. Die zweite Abfrage veranschaulicht, dass SingleOrDefault<TSource>(IQueryable<TSource>) Gibt einen Standardwert zurück, wenn die Sequenz nicht genau ein Element enthält.

// 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!
*/

Der Wert von default(TSource) ist nicht der Standardwert, der zu verwenden, wenn die Auflistung keine Elemente enthält. Anstatt das Ergebnis für den unerwünschten Standardwert zu ändern, wenn erforderlich, können Sie die DefaultIfEmpty<TSource>(IQueryable<TSource>, TSource) Methode, um den Standardwert anzugeben, die zu verwenden, wenn die Auflistung leer ist. Rufen Sie dann Single<TSource>(IQueryable<TSource>) um das Element abzurufen. Im folgenden Codebeispiel werden beide Verfahren verwendet, um den Standardwert 1 zu erhalten, wenn eine Auflistung von Seitenzahlen leer ist. Da der Standardwert für eine ganze Zahl 0, wird nicht in der Regel eine gültige Seitenzahl ist, muss der Standardwert stattdessen als 1 angegeben werden. Die erste Ergebnisvariable wird auf den unerwünschten Standardwert überprüft, nachdem die Abfrage abgeschlossen ist. Die zweite Ergebnisvariable wird durch Aufrufen von DefaultIfEmpty<TSource>(IQueryable<TSource>, TSource) an den Standardwert 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
*/

Universelle Windows-Plattform
Verfügbar seit 8
.NET Framework
Verfügbar seit 3.5
Portierbare Klassenbibliothek
Unterstützt in: portierbare .NET-Plattformen
Silverlight
Verfügbar seit 2.0
Windows Phone Silverlight
Verfügbar seit 7.1
Windows Phone
Verfügbar seit 8.1
Zurück zum Anfang
Anzeigen: