Queryable.SingleOrDefault Metoda

Definicja

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 w sekwencji znajduje się 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 w sekwencji znajduje się 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 w sekwencji znajduje się 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 do IEnumerable<T> zwrócenia pojedynczego elementu.

defaultValue
TSource

Wartość domyślna, która ma być zwracana, jeśli sekwencja jest pusta.

Zwraca

TSource

Pojedynczy element sekwencji wejściowej 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 do IEnumerable<T> 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

TSource

Pojedynczy element sekwencji wejściowej, który spełnia warunek lub defaultValue jeśli taki element nie zostanie znaleziony.

Wyjątki

source lub predicate to 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 w sekwencji znajduje się 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 do IQueryable<T> zwrócenia pojedynczego elementu.

Zwraca

TSource

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 zwraca wartość domyślną, SingleOrDefault<TSource>(IQueryable<TSource>) 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 zmienić ją w razie potrzeby, możesz użyć metody , aby określić wartość domyślną, której chcesz użyć DefaultIfEmpty<TSource>(IQueryable<TSource>, TSource) , jeśli kolekcja jest pusta. Następnie wywołaj metodę Single<TSource>(IQueryable<TSource>) , aby uzyskać element. Poniższy przykład kodu używa 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 zwykle nie jest 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) aby określić wartość domyślną 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 element MethodCallExpression , który reprezentuje wywołanie SingleOrDefault<TSource>(IQueryable<TSource>) siebie jako skonstruowaną metodę ogólną. Następnie przekazuje MethodCallExpression element do Execute<TResult>(Expression) metody reprezentowanej IQueryProvider przez Provider właściwość parametru source .

Zachowanie zapytania, które występuje w wyniku wykonania drzewa wyrażeń, które reprezentuje wywołanie SingleOrDefault<TSource>(IQueryable<TSource>) , zależy od implementacji typu parametru source . Oczekiwane zachowanie polega na tym, że zwraca jedyny element w sourceobiekcie lub wartość domyślną, jeśli source jest pusta.

Metoda SingleOrDefault nie zapewnia sposobu określania wartości domyślnej. Jeśli chcesz określić wartość domyślną inną niż default(TSource), użyj DefaultIfEmpty<TSource>(IQueryable<TSource>, TSource) metody zgodnie z opisem 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 do IQueryable<T> zwrócenia pojedynczego elementu z.

predicate
Expression<Func<TSource,Boolean>>

Funkcja do testowania elementu dla warunku.

Zwraca

TSource

Pojedynczy element sekwencji wejściowej, który spełnia warunek w predicateelemecie , lub default(TSource), jeśli taki element nie zostanie znaleziony.

Wyjątki

source lub predicate to 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 zwraca wartość domyślną, SingleOrDefault<TSource>(IQueryable<TSource>, Expression<Func<TSource,Boolean>>) 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. W przypadku 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 element MethodCallExpression , który reprezentuje wywołanie SingleOrDefault<TSource>(IQueryable<TSource>, Expression<Func<TSource,Boolean>>) siebie jako skonstruowaną metodę ogólną. Następnie przekazuje MethodCallExpression element do Execute<TResult>(Expression) metody reprezentowanej IQueryProvider przez Provider właściwość parametru source .

Zachowanie zapytania, które występuje w wyniku wykonania drzewa wyrażeń, które reprezentuje 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, który source spełnia warunek określony przez predicate, lub wartość domyślną, jeśli taki element nie istnieje.

Dotyczy