Queryable.SingleOrDefault Methode

Definitie

Retourneert één specifiek element van een reeks of een standaardwaarde als er geen dergelijk element wordt gevonden.

Overloads

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

Retourneert het enige element van een reeks die voldoet aan een opgegeven voorwaarde of een standaardwaarde als er geen dergelijk element bestaat; met deze methode wordt een uitzondering gegenereerd als meer dan één element voldoet aan de voorwaarde.

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

Retourneert het enige element van een reeks of een standaardwaarde als de reeks leeg is; met deze methode wordt een uitzondering gegenereerd als er meer dan één element in de reeks staat.

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

Retourneert het enige element van een reeks die voldoet aan een opgegeven voorwaarde of een standaardwaarde als er geen dergelijk element bestaat; met deze methode wordt een uitzondering gegenereerd als meer dan één element voldoet aan de voorwaarde.

SingleOrDefault<TSource>(IQueryable<TSource>)

Retourneert het enige element van een reeks of een standaardwaarde als de reeks leeg is; met deze methode wordt een uitzondering gegenereerd als er meer dan één element in de reeks staat.

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

Bron:
Queryable.cs
Bron:
Queryable.cs
Bron:
Queryable.cs
Bron:
Queryable.cs
Bron:
Queryable.cs

Retourneert het enige element van een reeks die voldoet aan een opgegeven voorwaarde of een standaardwaarde als er geen dergelijk element bestaat; met deze methode wordt een uitzondering gegenereerd als meer dan één element voldoet aan de voorwaarde.

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);
[System.Diagnostics.CodeAnalysis.RequiresDynamicCode("Enumerating collections as IQueryable can require creating new generic types or methods, which requires creating code at runtime. This may not work when AOT compiling.")]
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
[<System.Diagnostics.CodeAnalysis.RequiresDynamicCode("Enumerating collections as IQueryable can require creating new generic types or methods, which requires creating code at runtime. This may not work when AOT compiling.")>]
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

Type parameters

TSource

Het type van de elementen van source.

Parameters

source
IQueryable<TSource>

Een IEnumerable<T> om één element van te retourneren.

predicate
Expression<Func<TSource,Boolean>>

Een functie om een element voor een voorwaarde te testen.

defaultValue
TSource

De standaardwaarde die moet worden geretourneerd als de reeks leeg is.

Retouren

TSource

Het enige element van de invoerreeks die voldoet aan de voorwaarde of defaultValue als er geen dergelijk element wordt gevonden.

Kenmerken

Uitzonderingen

source of predicate is null.

Meer dan één element voldoet aan de voorwaarde in predicate.

Van toepassing op

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

Bron:
Queryable.cs
Bron:
Queryable.cs
Bron:
Queryable.cs
Bron:
Queryable.cs
Bron:
Queryable.cs

Retourneert het enige element van een reeks of een standaardwaarde als de reeks leeg is; met deze methode wordt een uitzondering gegenereerd als er meer dan één element in de reeks staat.

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);
[System.Diagnostics.CodeAnalysis.RequiresDynamicCode("Enumerating collections as IQueryable can require creating new generic types or methods, which requires creating code at runtime. This may not work when AOT compiling.")]
public static TSource SingleOrDefault<TSource>(this System.Linq.IQueryable<TSource> source, TSource defaultValue);
static member SingleOrDefault : System.Linq.IQueryable<'Source> * 'Source -> 'Source
[<System.Diagnostics.CodeAnalysis.RequiresDynamicCode("Enumerating collections as IQueryable can require creating new generic types or methods, which requires creating code at runtime. This may not work when AOT compiling.")>]
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

Type parameters

TSource

Het type van de elementen van source.

Parameters

source
IQueryable<TSource>

Een IEnumerable<T> om het ene element van te retourneren.

defaultValue
TSource

De standaardwaarde die moet worden geretourneerd als de reeks leeg is.

Retouren

TSource

Het enige element van de invoerreeks of defaultValue als de reeks geen elementen bevat.

Kenmerken

Uitzonderingen

source is null.

De invoerreeks bevat meer dan één element.

Van toepassing op

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

Bron:
Queryable.cs
Bron:
Queryable.cs
Bron:
Queryable.cs
Bron:
Queryable.cs
Bron:
Queryable.cs

Retourneert het enige element van een reeks die voldoet aan een opgegeven voorwaarde of een standaardwaarde als er geen dergelijk element bestaat; met deze methode wordt een uitzondering gegenereerd als meer dan één element voldoet aan de voorwaarde.

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);
[System.Diagnostics.CodeAnalysis.RequiresDynamicCode("Enumerating collections as IQueryable can require creating new generic types or methods, which requires creating code at runtime. This may not work when AOT compiling.")]
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
[<System.Diagnostics.CodeAnalysis.RequiresDynamicCode("Enumerating collections as IQueryable can require creating new generic types or methods, which requires creating code at runtime. This may not work when AOT compiling.")>]
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

Type parameters

TSource

Het type van de elementen van source.

Parameters

source
IQueryable<TSource>

Een IQueryable<T> om één element van te retourneren.

predicate
Expression<Func<TSource,Boolean>>

Een functie om een element voor een voorwaarde te testen.

Retouren

TSource

Het enige element van de invoerreeks die voldoet aan de voorwaarde in predicate, of default(TSource) als er geen dergelijk element wordt gevonden.

Kenmerken

Uitzonderingen

source of predicate is null.

Meer dan één element voldoet aan de voorwaarde in predicate.

Voorbeelden

In het volgende codevoorbeeld ziet u hoe SingleOrDefault<TSource>(IQueryable<TSource>, Expression<Func<TSource,Boolean>>) u het enige element van een matrix selecteert dat voldoet aan een voorwaarde. De tweede query laat zien dat SingleOrDefault<TSource>(IQueryable<TSource>, Expression<Func<TSource,Boolean>>) een standaardwaarde wordt geretourneerd wanneer de reeks niet precies één element bevat dat voldoet aan de voorwaarde.

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!

Opmerkingen

Deze methode heeft ten minste één parameter van het type Expression<TDelegate> waarvan het typeargument een van de Func<T,TResult> typen is. Voor deze parameters kunt u een lambda-expressie doorgeven en deze wordt gecompileerd naar een Expression<TDelegate>.

De SingleOrDefault<TSource>(IQueryable<TSource>, Expression<Func<TSource,Boolean>>) methode genereert een MethodCallExpression die zichzelf aanroept SingleOrDefault<TSource>(IQueryable<TSource>, Expression<Func<TSource,Boolean>>) als een samengestelde algemene methode. Vervolgens wordt de MethodCallExpression methode doorgegeven aan de Execute<TResult>(Expression) methode van de IQueryProvider vertegenwoordigd door de Provider eigenschap van de source parameter.

Het querygedrag dat optreedt als gevolg van het uitvoeren van een expressiestructuur die aanroept SingleOrDefault<TSource>(IQueryable<TSource>, Expression<Func<TSource,Boolean>>) , is afhankelijk van de implementatie van het type source parameter. Het verwachte gedrag is dat het het enige element retourneert source dat voldoet aan de voorwaarde die is opgegeven door predicate, of een standaardwaarde als er geen dergelijk element bestaat.

Van toepassing op

SingleOrDefault<TSource>(IQueryable<TSource>)

Bron:
Queryable.cs
Bron:
Queryable.cs
Bron:
Queryable.cs
Bron:
Queryable.cs
Bron:
Queryable.cs

Retourneert het enige element van een reeks of een standaardwaarde als de reeks leeg is; met deze methode wordt een uitzondering gegenereerd als er meer dan één element in de reeks staat.

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);
[System.Diagnostics.CodeAnalysis.RequiresDynamicCode("Enumerating collections as IQueryable can require creating new generic types or methods, which requires creating code at runtime. This may not work when AOT compiling.")]
public static TSource? SingleOrDefault<TSource>(this System.Linq.IQueryable<TSource> source);
static member SingleOrDefault : System.Linq.IQueryable<'Source> -> 'Source
[<System.Diagnostics.CodeAnalysis.RequiresDynamicCode("Enumerating collections as IQueryable can require creating new generic types or methods, which requires creating code at runtime. This may not work when AOT compiling.")>]
static member SingleOrDefault : System.Linq.IQueryable<'Source> -> 'Source
<Extension()>
Public Function SingleOrDefault(Of TSource) (source As IQueryable(Of TSource)) As TSource

Type parameters

TSource

Het type van de elementen van source.

Parameters

source
IQueryable<TSource>

Een IQueryable<T> om het ene element van te retourneren.

Retouren

TSource

Het enige element van de invoerreeks of default(TSource) als de reeks geen elementen bevat.

Kenmerken

Uitzonderingen

source is null.

source heeft meer dan één element.

Voorbeelden

In het volgende codevoorbeeld ziet u hoe SingleOrDefault<TSource>(IQueryable<TSource>) u het enige element van een matrix selecteert. De tweede query laat zien dat SingleOrDefault<TSource>(IQueryable<TSource>) een standaardwaarde wordt geretourneerd wanneer de reeks niet precies één element bevat.

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

Soms is de waarde default(TSource) niet de standaardwaarde die u wilt gebruiken als de verzameling geen elementen bevat. In plaats van het resultaat te controleren op de ongewenste standaardwaarde en deze vervolgens indien nodig te wijzigen, kunt u de DefaultIfEmpty<TSource>(IQueryable<TSource>, TSource) methode gebruiken om de standaardwaarde op te geven die u wilt gebruiken als de verzameling leeg is. Single<TSource>(IQueryable<TSource>) Roep vervolgens aan om het element te verkrijgen. In het volgende codevoorbeeld worden beide technieken gebruikt om een standaardwaarde van 1 te verkrijgen als een verzameling paginanummers leeg is. Omdat de standaardwaarde voor een geheel getal 0 is, wat meestal geen geldig paginanummer is, moet de standaardwaarde worden opgegeven als 1. De eerste resultaatvariabele wordt gecontroleerd op de ongewenste standaardwaarde nadat de query is voltooid. De tweede resultaatvariabele wordt verkregen door aan te roepen DefaultIfEmpty<TSource>(IQueryable<TSource>, TSource) om een standaardwaarde van 1 op te geven.

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

Opmerkingen

De SingleOrDefault<TSource>(IQueryable<TSource>) methode genereert een MethodCallExpression die zichzelf aanroept SingleOrDefault<TSource>(IQueryable<TSource>) als een samengestelde algemene methode. Vervolgens wordt de MethodCallExpression methode doorgegeven aan de Execute<TResult>(Expression) methode van de IQueryProvider vertegenwoordigd door de Provider eigenschap van de source parameter.

Het querygedrag dat optreedt als gevolg van het uitvoeren van een expressiestructuur die aanroept SingleOrDefault<TSource>(IQueryable<TSource>) , is afhankelijk van de implementatie van het type source parameter. Het verwachte gedrag is dat het het enige element retourneert in source, of een standaardwaarde als source deze leeg is.

De SingleOrDefault methode biedt geen manier om een standaardwaarde op te geven. Als u een andere standaardwaarde dan default(TSource)wilt opgeven, gebruikt u de DefaultIfEmpty<TSource>(IQueryable<TSource>, TSource) methode zoals beschreven in de sectie Voorbeeld.

Van toepassing op