Queryable.SingleOrDefault Methode
Definitie
Belangrijk
Bepaalde informatie heeft betrekking op een voorlopige productversie die aanzienlijk kan worden gewijzigd voordat deze wordt uitgebracht. Microsoft biedt geen enkele expliciete of impliciete garanties met betrekking tot de informatie die hier wordt verstrekt.
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
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
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
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
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.