Freigeben über


Queryable.SingleOrDefault Methode

Definition

Gibt ein einzelnes, bestimmtes Element einer Sequenz oder einen Standardwert zurück, wenn kein solches Element gefunden wird.

Überlädt

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

Gibt das einzige Element einer Sequenz oder einen Standardwert zurück, wenn die Sequenz leer ist; Diese Methode löst eine Ausnahme aus, wenn mehrere Elemente in der Sequenz vorhanden sind.

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

Gibt das einzige Element einer Sequenz zurück, das eine angegebene Bedingung oder einen Standardwert erfüllt, wenn kein solches Element vorhanden ist; Diese Methode löst eine Ausnahme aus, wenn mehrere Elemente die Bedingung erfüllen.

SingleOrDefault<TSource>(IQueryable<TSource>)

Gibt das einzige Element einer Sequenz oder einen Standardwert zurück, wenn die Sequenz leer ist; Diese Methode löst eine Ausnahme aus, wenn mehrere Elemente in der Sequenz vorhanden sind.

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

Gibt das einzige Element einer Sequenz zurück, das eine angegebene Bedingung oder einen Standardwert erfüllt, wenn kein solches Element vorhanden ist; Diese Methode löst eine Ausnahme aus, wenn mehrere Elemente die Bedingung erfüllen.

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

Quelle:
Queryable.cs
Quelle:
Queryable.cs
Quelle:
Queryable.cs

Gibt das einzige Element einer Sequenz oder einen Standardwert zurück, wenn die Sequenz leer ist; Diese Methode löst eine Ausnahme aus, wenn mehrere Elemente in der Sequenz vorhanden sind.

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

Typparameter

TSource

Der Typ der Elemente von source.

Parameter

source
IQueryable<TSource>

Ein IEnumerable<T>, um das einzelne Element zurückzugeben.

defaultValue
TSource

Der Standardwert, der zurückgegeben werden soll, wenn die Sequenz leer ist.

Gibt zurück

TSource

Das einzelne Element der Eingabesequenz oder defaultValue, wenn die Sequenz keine Elemente enthält.

Ausnahmen

source ist null.

Die Eingabesequenz enthält mehrere Elemente.

Gilt für:

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

Quelle:
Queryable.cs
Quelle:
Queryable.cs
Quelle:
Queryable.cs

Gibt das einzige Element einer Sequenz zurück, das eine angegebene Bedingung oder einen Standardwert erfüllt, wenn kein solches Element vorhanden ist; Diese Methode löst eine Ausnahme aus, wenn mehrere Elemente die Bedingung erfüllen.

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

Typparameter

TSource

Der Typ der Elemente von source.

Parameter

source
IQueryable<TSource>

Ein IEnumerable<T> ein einzelnes Element zurückzugeben.

predicate
Expression<Func<TSource,Boolean>>

Eine Funktion zum Testen eines Elements für eine Bedingung.

defaultValue
TSource

Der Standardwert, der zurückgegeben werden soll, wenn die Sequenz leer ist.

Gibt zurück

TSource

Das einzelne Element der Eingabesequenz, das die Bedingung erfüllt, oder defaultValue, wenn kein solches Element gefunden wird.

Ausnahmen

source oder predicate ist null.

Mehr als ein Element erfüllt die Bedingung in predicate.

Gilt für:

SingleOrDefault<TSource>(IQueryable<TSource>)

Quelle:
Queryable.cs
Quelle:
Queryable.cs
Quelle:
Queryable.cs

Gibt das einzige Element einer Sequenz oder einen Standardwert zurück, wenn die Sequenz leer ist; Diese Methode löst eine Ausnahme aus, wenn mehrere Elemente in der Sequenz vorhanden sind.

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

Typparameter

TSource

Der Typ der Elemente von source.

Parameter

source
IQueryable<TSource>

Ein IQueryable<T>, um das einzelne Element zurückzugeben.

Gibt zurück

TSource

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

Ausnahmen

source ist null.

source hat mehr als ein Element.

Beispiele

Im folgenden Codebeispiel wird veranschaulicht, wie sie SingleOrDefault<TSource>(IQueryable<TSource>) verwenden, um das einzige Element eines Arrays auszuwählen. Die zweite Abfrage veranschaulicht, dass SingleOrDefault<TSource>(IQueryable<TSource>) einen Standardwert zurückgibt, 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!
*/
' 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!

Manchmal ist der Wert von default(TSource) nicht der Standardwert, den Sie verwenden möchten, wenn die Auflistung keine Elemente enthält. Anstatt das Ergebnis auf den unerwünschten Standardwert zu überprüfen und es bei Bedarf zu ändern, können Sie die DefaultIfEmpty<TSource>(IQueryable<TSource>, TSource)-Methode verwenden, um den Standardwert anzugeben, den Sie verwenden möchten, wenn die Auflistung leer ist. Rufen Sie dann Single<TSource>(IQueryable<TSource>) auf, um das Element abzurufen. Im folgenden Codebeispiel werden beide Techniken verwendet, um einen Standardwert von 1 abzurufen, wenn eine Auflistung von Seitenzahlen leer ist. Da der Standardwert für eine ganze Zahl 0 ist, was in der Regel keine gültige Seitenzahl ist, muss der Standardwert stattdessen als 1 angegeben werden. Die erste Ergebnisvariable wird nach Abschluss der Abfrage auf den unerwünschten Standardwert überprüft. Die zweite Ergebnisvariable wird durch Aufrufen von DefaultIfEmpty<TSource>(IQueryable<TSource>, TSource) abgerufen, um einen Standardwert von 1 anzugeben.

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

Hinweise

Die SingleOrDefault<TSource>(IQueryable<TSource>)-Methode generiert eine MethodCallExpression, die das Aufrufen SingleOrDefault<TSource>(IQueryable<TSource>) selbst als konstruierte generische Methode darstellt. Anschließend wird die MethodCallExpression an die Execute<TResult>(Expression) Methode der IQueryProvider übergeben, die durch die Provider-Eigenschaft des source-Parameters dargestellt wird.

Das Abfrageverhalten, das als Ergebnis der Ausführung einer Ausdrucksstruktur auftritt, die aufruft SingleOrDefault<TSource>(IQueryable<TSource>) darstellt, hängt von der Implementierung des Typs des source Parameters ab. Das erwartete Verhalten ist, dass es das einzige Element in sourceoder einen Standardwert zurückgibt, wenn source leer ist.

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

Gilt für:

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

Quelle:
Queryable.cs
Quelle:
Queryable.cs
Quelle:
Queryable.cs

Gibt das einzige Element einer Sequenz zurück, das eine angegebene Bedingung oder einen Standardwert erfüllt, wenn kein solches Element vorhanden ist; Diese Methode löst eine Ausnahme aus, wenn mehrere Elemente die Bedingung erfüllen.

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

Typparameter

TSource

Der Typ der Elemente von source.

Parameter

source
IQueryable<TSource>

Ein IQueryable<T> ein einzelnes Element zurückzugeben.

predicate
Expression<Func<TSource,Boolean>>

Eine Funktion zum Testen eines Elements für eine Bedingung.

Gibt zurück

TSource

Das einzelne Element der Eingabesequenz, das die Bedingung in predicateerfüllt, oder default(TSource), wenn kein solches Element gefunden wird.

Ausnahmen

source oder predicate ist null.

Mehr als ein Element erfüllt die Bedingung in predicate.

Beispiele

Im folgenden Codebeispiel wird veranschaulicht, wie sie SingleOrDefault<TSource>(IQueryable<TSource>, Expression<Func<TSource,Boolean>>) verwenden, um das einzige Element eines Arrays auszuwählen, das eine Bedingung erfüllt. Die zweite Abfrage zeigt, dass SingleOrDefault<TSource>(IQueryable<TSource>, Expression<Func<TSource,Boolean>>) einen Standardwert zurückgibt, wenn die Sequenz nicht genau ein Element enthält, das die Bedingung erfüllt.

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!

Hinweise

Diese Methode weist mindestens einen Parameter vom Typ Expression<TDelegate> auf, dessen Typargument einer der Func<T,TResult> Typen ist. Für diese Parameter können Sie einen Lambda-Ausdruck übergeben und zu einem Expression<TDelegate>kompiliert werden.

Die SingleOrDefault<TSource>(IQueryable<TSource>, Expression<Func<TSource,Boolean>>)-Methode generiert eine MethodCallExpression, die das Aufrufen SingleOrDefault<TSource>(IQueryable<TSource>, Expression<Func<TSource,Boolean>>) selbst als konstruierte generische Methode darstellt. Anschließend wird die MethodCallExpression an die Execute<TResult>(Expression) Methode der IQueryProvider übergeben, die durch die Provider-Eigenschaft des source-Parameters dargestellt wird.

Das Abfrageverhalten, das als Ergebnis der Ausführung einer Ausdrucksstruktur auftritt, die aufruft SingleOrDefault<TSource>(IQueryable<TSource>, Expression<Func<TSource,Boolean>>) darstellt, hängt von der Implementierung des Typs des source Parameters ab. Das erwartete Verhalten besteht darin, dass es das einzige Element in source zurückgibt, das die durch predicateangegebene Bedingung erfüllt, oder ein Standardwert, wenn kein solches Element vorhanden ist.

Gilt für: