Queryable.SingleOrDefault Metoda
Definicja
Ważne
Niektóre informacje odnoszą się do produktu w wersji wstępnej, który może zostać znacząco zmodyfikowany przed wydaniem. Firma Microsoft nie udziela żadnych gwarancji, jawnych lub domniemanych, w odniesieniu do informacji podanych w tym miejscu.
Zwraca pojedynczy, konkretny element sekwencji lub wartość domyślną, jeśli taki element nie zostanie znaleziony.
Przeciążenia
SingleOrDefault<TSource>(IQueryable<TSource>, TSource) |
Zwraca jedyny element sekwencji lub wartość domyślną, jeśli sekwencja jest pusta; Ta metoda zgłasza wyjątek, jeśli sekwencja zawiera więcej niż jeden element. |
SingleOrDefault<TSource>(IQueryable<TSource>, Expression<Func<TSource,Boolean>>, TSource) |
Zwraca jedyny element sekwencji, który spełnia określony warunek lub wartość domyślną, jeśli taki element nie istnieje; Ta metoda zgłasza wyjątek, jeśli warunek spełnia więcej niż jeden element. |
SingleOrDefault<TSource>(IQueryable<TSource>) |
Zwraca jedyny element sekwencji lub wartość domyślną, jeśli sekwencja jest pusta; Ta metoda zgłasza wyjątek, jeśli sekwencja zawiera więcej niż jeden element. |
SingleOrDefault<TSource>(IQueryable<TSource>, Expression<Func<TSource,Boolean>>) |
Zwraca jedyny element sekwencji, który spełnia określony warunek lub wartość domyślną, jeśli taki element nie istnieje; Ta metoda zgłasza wyjątek, jeśli warunek spełnia więcej niż jeden element. |
SingleOrDefault<TSource>(IQueryable<TSource>, TSource)
- Źródło:
- Queryable.cs
- Źródło:
- Queryable.cs
- Źródło:
- Queryable.cs
Zwraca jedyny element sekwencji lub wartość domyślną, jeśli sekwencja jest pusta; Ta metoda zgłasza wyjątek, jeśli sekwencja zawiera więcej niż jeden element.
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 elementów elementu source
.
Parametry
- source
- IQueryable<TSource>
Element IEnumerable<T> umożliwiający zwrócenie pojedynczego elementu elementu .
- defaultValue
- TSource
Wartość domyślna, która ma być zwracana, jeśli sekwencja jest pusta.
Zwraca
Pojedynczy element sekwencji danych wejściowych lub defaultValue
jeśli sekwencja nie zawiera żadnych elementów.
Wyjątki
source
to null
.
Sekwencja wejściowa zawiera więcej niż jeden element.
Dotyczy
SingleOrDefault<TSource>(IQueryable<TSource>, Expression<Func<TSource,Boolean>>, TSource)
- Źródło:
- Queryable.cs
- Źródło:
- Queryable.cs
- Źródło:
- Queryable.cs
Zwraca jedyny element sekwencji, który spełnia określony warunek lub wartość domyślną, jeśli taki element nie istnieje; Ta metoda zgłasza wyjątek, jeśli warunek spełnia więcej niż jeden element.
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 elementów elementu source
.
Parametry
- source
- IQueryable<TSource>
Element IEnumerable<T> do zwrócenia pojedynczego elementu z.
- predicate
- Expression<Func<TSource,Boolean>>
Funkcja do testowania elementu dla warunku.
- defaultValue
- TSource
Wartość domyślna, która ma być zwracana, jeśli sekwencja jest pusta.
Zwraca
Pojedynczy element sekwencji danych wejściowych, który spełnia warunek lub defaultValue
jeśli taki element nie zostanie znaleziony.
Wyjątki
source
lub predicate
ma wartość null
.
Więcej niż jeden element spełnia warunek w elemecie predicate
.
Dotyczy
SingleOrDefault<TSource>(IQueryable<TSource>)
- Źródło:
- Queryable.cs
- Źródło:
- Queryable.cs
- Źródło:
- Queryable.cs
Zwraca jedyny element sekwencji lub wartość domyślną, jeśli sekwencja jest pusta; Ta metoda zgłasza wyjątek, jeśli sekwencja zawiera więcej niż jeden element.
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 elementów elementu source
.
Parametry
- source
- IQueryable<TSource>
Element IQueryable<T> umożliwiający zwrócenie pojedynczego elementu elementu .
Zwraca
Pojedynczy element sekwencji danych wejściowych lub default
(TSource
), jeśli sekwencja nie zawiera żadnych elementów.
Wyjątki
source
to null
.
source
ma więcej niż jeden element.
Przykłady
W poniższym przykładzie kodu pokazano, jak użyć SingleOrDefault<TSource>(IQueryable<TSource>) polecenia , aby wybrać jedyny element tablicy. Drugie zapytanie pokazuje, że SingleOrDefault<TSource>(IQueryable<TSource>) zwraca wartość domyślną, gdy sekwencja nie zawiera dokładnie jednego elementu.
// 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!
Czasami wartość nie default(TSource)
jest wartością domyślną, której chcesz użyć, jeśli kolekcja nie zawiera żadnych elementów. Zamiast sprawdzać wynik dla niepożądanej wartości domyślnej, a następnie w razie potrzeby zmienić ją, możesz użyć DefaultIfEmpty<TSource>(IQueryable<TSource>, TSource) metody , aby określić wartość domyślną, której chcesz użyć, jeśli kolekcja jest pusta. Następnie wywołaj metodę Single<TSource>(IQueryable<TSource>) , aby uzyskać element . W poniższym przykładzie kodu użyto obu technik w celu uzyskania wartości domyślnej 1, jeśli kolekcja numerów stron jest pusta. Ponieważ wartość domyślna dla liczby całkowitej wynosi 0, która nie jest zwykle prawidłowym numerem strony, wartość domyślna musi być określona jako 1. Pierwsza zmienna wynikowa jest sprawdzana pod kątem niepożądanej wartości domyślnej po zakończeniu zapytania. Druga zmienna wynikowa jest uzyskiwana przez wywołanie DefaultIfEmpty<TSource>(IQueryable<TSource>, TSource) metody w celu określenia wartości domyślnej 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
Uwagi
Metoda SingleOrDefault<TSource>(IQueryable<TSource>) generuje obiekt MethodCallExpression , który reprezentuje wywołanie SingleOrDefault<TSource>(IQueryable<TSource>) siebie jako skonstruowaną metodę ogólną. Następnie przekazuje MethodCallExpression wartość do Execute<TResult>(Expression) metody IQueryProvider reprezentowanej przez Provider właściwość parametru source
.
Zachowanie zapytania, które występuje w wyniku wykonania drzewa wyrażeń reprezentującego wywołanie SingleOrDefault<TSource>(IQueryable<TSource>) , zależy od implementacji typu parametru source
. Oczekiwane zachowanie polega na tym, że zwraca jedyny element w source
elemecie lub wartość domyślną, jeśli source
jest pusta.
Metoda SingleOrDefault nie umożliwia określenia wartości domyślnej. Jeśli chcesz określić wartość domyślną inną niż default(TSource)
, użyj metody zgodnie z opisem DefaultIfEmpty<TSource>(IQueryable<TSource>, TSource) w sekcji Przykład.
Dotyczy
SingleOrDefault<TSource>(IQueryable<TSource>, Expression<Func<TSource,Boolean>>)
- Źródło:
- Queryable.cs
- Źródło:
- Queryable.cs
- Źródło:
- Queryable.cs
Zwraca jedyny element sekwencji, który spełnia określony warunek lub wartość domyślną, jeśli taki element nie istnieje; Ta metoda zgłasza wyjątek, jeśli warunek spełnia więcej niż jeden element.
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 elementów elementu source
.
Parametry
- source
- IQueryable<TSource>
Element IQueryable<T> do zwrócenia pojedynczego elementu z.
- predicate
- Expression<Func<TSource,Boolean>>
Funkcja do testowania elementu dla warunku.
Zwraca
Pojedynczy element sekwencji danych wejściowych, który spełnia warunek w predicate
elemecie , lub default
(TSource
), jeśli taki element nie zostanie znaleziony.
Wyjątki
source
lub predicate
ma wartość null
.
Więcej niż jeden element spełnia warunek w elemecie predicate
.
Przykłady
W poniższym przykładzie kodu pokazano, jak użyć SingleOrDefault<TSource>(IQueryable<TSource>, Expression<Func<TSource,Boolean>>) polecenia , aby wybrać jedyny element tablicy, który spełnia warunek. Drugie zapytanie pokazuje, że SingleOrDefault<TSource>(IQueryable<TSource>, Expression<Func<TSource,Boolean>>) zwraca wartość domyślną, gdy sekwencja nie zawiera dokładnie jednego elementu, który spełnia warunek.
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!
Uwagi
Ta metoda ma co najmniej jeden parametr typu Expression<TDelegate> , którego argument type jest jednym z Func<T,TResult> typów. Dla tych parametrów można przekazać wyrażenie lambda i zostanie skompilowane do elementu Expression<TDelegate>.
Metoda SingleOrDefault<TSource>(IQueryable<TSource>, Expression<Func<TSource,Boolean>>) generuje obiekt MethodCallExpression , który reprezentuje wywołanie SingleOrDefault<TSource>(IQueryable<TSource>, Expression<Func<TSource,Boolean>>) siebie jako skonstruowaną metodę ogólną. Następnie przekazuje MethodCallExpression wartość do Execute<TResult>(Expression) metody IQueryProvider reprezentowanej przez Provider właściwość parametru source
.
Zachowanie zapytania, które występuje w wyniku wykonania drzewa wyrażeń reprezentującego wywołanie SingleOrDefault<TSource>(IQueryable<TSource>, Expression<Func<TSource,Boolean>>) , zależy od implementacji typu parametru source
. Oczekiwane zachowanie polega na tym, że zwraca jedyny element, source
który spełnia warunek określony przez predicate
, lub wartość domyślną, jeśli taki element nie istnieje.