Queryable.SingleOrDefault Metoda
Definice
Důležité
Některé informace platí pro předběžně vydaný produkt, který se může zásadně změnit, než ho výrobce nebo autor vydá. Microsoft neposkytuje žádné záruky, výslovné ani předpokládané, týkající se zde uváděných informací.
Vrátí jeden, konkrétní prvek sekvence nebo výchozí hodnotu, pokud se žádný takový prvek nenajde.
Přetížení
SingleOrDefault<TSource>(IQueryable<TSource>, TSource) |
Vrátí jediný prvek sekvence nebo výchozí hodnotu, pokud je sekvence prázdná; tato metoda vyvolá výjimku, pokud je v sekvenci více než jeden prvek. |
SingleOrDefault<TSource>(IQueryable<TSource>, Expression<Func<TSource,Boolean>>, TSource) |
Vrátí jediný prvek sekvence, která splňuje zadanou podmínku nebo výchozí hodnotu, pokud žádný takový prvek neexistuje; tato metoda vyvolá výjimku, pokud podmínka splňuje více než jeden prvek. |
SingleOrDefault<TSource>(IQueryable<TSource>) |
Vrátí jediný prvek sekvence nebo výchozí hodnotu, pokud je sekvence prázdná; tato metoda vyvolá výjimku, pokud je v sekvenci více než jeden prvek. |
SingleOrDefault<TSource>(IQueryable<TSource>, Expression<Func<TSource,Boolean>>) |
Vrátí jediný prvek sekvence, která splňuje zadanou podmínku nebo výchozí hodnotu, pokud žádný takový prvek neexistuje; tato metoda vyvolá výjimku, pokud podmínka splňuje více než jeden prvek. |
SingleOrDefault<TSource>(IQueryable<TSource>, TSource)
- Zdroj:
- Queryable.cs
- Zdroj:
- Queryable.cs
- Zdroj:
- Queryable.cs
Vrátí jediný prvek sekvence nebo výchozí hodnotu, pokud je sekvence prázdná; tato metoda vyvolá výjimku, pokud je v sekvenci více než jeden prvek.
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
Parametry typu
- TSource
Typ prvků source
.
Parametry
- source
- IQueryable<TSource>
IEnumerable<T> vrátit jeden prvek.
- defaultValue
- TSource
Výchozí hodnota, která se má vrátit, pokud je sekvence prázdná.
Návraty
Jeden prvek vstupní sekvence nebo defaultValue
, pokud sekvence neobsahuje žádné prvky.
Výjimky
source
je null
.
Vstupní sekvence obsahuje více než jeden prvek.
Platí pro
SingleOrDefault<TSource>(IQueryable<TSource>, Expression<Func<TSource,Boolean>>, TSource)
- Zdroj:
- Queryable.cs
- Zdroj:
- Queryable.cs
- Zdroj:
- Queryable.cs
Vrátí jediný prvek sekvence, která splňuje zadanou podmínku nebo výchozí hodnotu, pokud žádný takový prvek neexistuje; tato metoda vyvolá výjimku, pokud podmínka splňuje více než jeden prvek.
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
Parametry typu
- TSource
Typ prvků source
.
Parametry
- source
- IQueryable<TSource>
IEnumerable<T>, ze které se má vrátit jeden prvek.
- predicate
- Expression<Func<TSource,Boolean>>
Funkce k otestování prvku pro podmínku.
- defaultValue
- TSource
Výchozí hodnota, která se má vrátit, pokud je sekvence prázdná.
Návraty
Jediný prvek vstupní sekvence, která splňuje podmínku, nebo defaultValue
, pokud se takový prvek nenajde.
Výjimky
source
nebo predicate
je null
.
Podmínka v predicate
splňuje více než jeden prvek .
Platí pro
SingleOrDefault<TSource>(IQueryable<TSource>)
- Zdroj:
- Queryable.cs
- Zdroj:
- Queryable.cs
- Zdroj:
- Queryable.cs
Vrátí jediný prvek sekvence nebo výchozí hodnotu, pokud je sekvence prázdná; tato metoda vyvolá výjimku, pokud je v sekvenci více než jeden prvek.
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
Parametry typu
- TSource
Typ prvků source
.
Parametry
- source
- IQueryable<TSource>
IQueryable<T> vrátit jeden prvek.
Návraty
Jeden prvek vstupní sekvence nebo default
(TSource
) pokud sekvence neobsahuje žádné prvky.
Výjimky
source
je null
.
source
má více než jeden prvek.
Příklady
Následující příklad kódu ukazuje, jak použít SingleOrDefault<TSource>(IQueryable<TSource>) vybrat jediný prvek pole. Druhý dotaz ukazuje, že SingleOrDefault<TSource>(IQueryable<TSource>) vrátí výchozí hodnotu, pokud sekvence neobsahuje přesně jeden prvek.
// 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!
Někdy hodnota default(TSource)
není výchozí hodnotou, kterou chcete použít, pokud kolekce neobsahuje žádné prvky. Místo kontroly výsledku nežádoucí výchozí hodnoty a v případě potřeby ji můžete změnit pomocí metody DefaultIfEmpty<TSource>(IQueryable<TSource>, TSource) určit výchozí hodnotu, kterou chcete použít, pokud je kolekce prázdná. Potom zavolejte Single<TSource>(IQueryable<TSource>) získat prvek. Následující příklad kódu používá obě techniky k získání výchozí hodnoty 1, pokud je kolekce čísel stránek prázdná. Vzhledem k tomu, že výchozí hodnota pro celé číslo je 0, což obvykle není platné číslo stránky, musí být výchozí hodnota zadána jako 1. První výsledná proměnná se po dokončení dotazu kontroluje pro nežádoucí výchozí hodnotu. Druhá výsledná proměnná se získá voláním DefaultIfEmpty<TSource>(IQueryable<TSource>, TSource) k určení výchozí hodnoty 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
*/
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
Poznámky
Metoda SingleOrDefault<TSource>(IQueryable<TSource>) vygeneruje MethodCallExpression, která představuje volání SingleOrDefault<TSource>(IQueryable<TSource>) sám jako konstruovanou obecnou metodu. Potom předá MethodCallExpression metodě Execute<TResult>(Expression)IQueryProvider reprezentované vlastností Provider parametru source
.
Chování dotazu, ke kterému dochází v důsledku spuštění stromu výrazu, který představuje volání SingleOrDefault<TSource>(IQueryable<TSource>) závisí na implementaci typu parametru source
. Očekávané chování je, že vrátí jediný prvek v source
nebo výchozí hodnotu, pokud je source
prázdný.
Metoda SingleOrDefault neposkytuje způsob, jak zadat výchozí hodnotu. Pokud chcete zadat jinou výchozí hodnotu než default(TSource)
, použijte metodu DefaultIfEmpty<TSource>(IQueryable<TSource>, TSource), jak je popsáno v části Příklad.
Platí pro
SingleOrDefault<TSource>(IQueryable<TSource>, Expression<Func<TSource,Boolean>>)
- Zdroj:
- Queryable.cs
- Zdroj:
- Queryable.cs
- Zdroj:
- Queryable.cs
Vrátí jediný prvek sekvence, která splňuje zadanou podmínku nebo výchozí hodnotu, pokud žádný takový prvek neexistuje; tato metoda vyvolá výjimku, pokud podmínka splňuje více než jeden prvek.
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
Parametry typu
- TSource
Typ prvků source
.
Parametry
- source
- IQueryable<TSource>
IQueryable<T>, ze které se má vrátit jeden prvek.
- predicate
- Expression<Func<TSource,Boolean>>
Funkce k otestování prvku pro podmínku.
Návraty
Jeden prvek vstupní sekvence, který splňuje podmínku v predicate
, nebo default
(TSource
) pokud se nenajde žádný takový prvek.
Výjimky
source
nebo predicate
je null
.
Podmínka v predicate
splňuje více než jeden prvek .
Příklady
Následující příklad kódu ukazuje, jak použít SingleOrDefault<TSource>(IQueryable<TSource>, Expression<Func<TSource,Boolean>>) k výběru jediného prvku pole, který splňuje podmínku. Druhý dotaz ukazuje, že SingleOrDefault<TSource>(IQueryable<TSource>, Expression<Func<TSource,Boolean>>) vrátí výchozí hodnotu, pokud sekvence neobsahuje přesně jeden prvek, který splňuje podmínku.
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!
Poznámky
Tato metoda má alespoň jeden parametr typu Expression<TDelegate>, jehož argument typu je jedním z Func<T,TResult> typů. Pro tyto parametry můžete předat výraz lambda a bude zkompilován do Expression<TDelegate>.
Metoda SingleOrDefault<TSource>(IQueryable<TSource>, Expression<Func<TSource,Boolean>>) vygeneruje MethodCallExpression, která představuje volání SingleOrDefault<TSource>(IQueryable<TSource>, Expression<Func<TSource,Boolean>>) sám jako konstruovanou obecnou metodu. Potom předá MethodCallExpression metodě Execute<TResult>(Expression)IQueryProvider reprezentované vlastností Provider parametru source
.
Chování dotazu, ke kterému dochází v důsledku spuštění stromu výrazu, který představuje volání SingleOrDefault<TSource>(IQueryable<TSource>, Expression<Func<TSource,Boolean>>) závisí na implementaci typu parametru source
. Očekávané chování je, že vrátí jediný prvek v source
, který splňuje podmínku určenou predicate
, nebo výchozí hodnotu, pokud neexistuje žádný takový prvek.