Queryable.SingleOrDefault Método
Definição
Importante
Algumas informações se referem a produtos de pré-lançamento que podem ser substancialmente modificados antes do lançamento. A Microsoft não oferece garantias, expressas ou implícitas, das informações aqui fornecidas.
Retorna um único elemento específico de uma sequência ou um valor padrão se nenhum elemento desse tipo for encontrado.
Sobrecargas
SingleOrDefault<TSource>(IQueryable<TSource>, TSource) |
Retorna o único elemento de uma sequência ou um valor padrão se a sequência estiver vazia; esse método gerará uma exceção se houver mais de um elemento na sequência. |
SingleOrDefault<TSource>(IQueryable<TSource>, Expression<Func<TSource,Boolean>>, TSource) |
Retorna o único elemento de uma sequência que satisfaz uma condição especificada ou um valor padrão se nenhum elemento desse tipo existir; esse método gerará uma exceção se mais de um elemento atender à condição. |
SingleOrDefault<TSource>(IQueryable<TSource>) |
Retorna o único elemento de uma sequência ou um valor padrão se a sequência estiver vazia; esse método gerará uma exceção se houver mais de um elemento na sequência. |
SingleOrDefault<TSource>(IQueryable<TSource>, Expression<Func<TSource,Boolean>>) |
Retorna o único elemento de uma sequência que satisfaz uma condição especificada ou um valor padrão se nenhum elemento desse tipo existir; esse método gerará uma exceção se mais de um elemento atender à condição. |
SingleOrDefault<TSource>(IQueryable<TSource>, TSource)
- Origem:
- Queryable.cs
- Origem:
- Queryable.cs
- Origem:
- Queryable.cs
Retorna o único elemento de uma sequência ou um valor padrão se a sequência estiver vazia; esse método gerará uma exceção se houver mais de um elemento na sequência.
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
Parâmetros de tipo
- TSource
O tipo dos elementos de source
.
Parâmetros
- source
- IQueryable<TSource>
Um IEnumerable<T> para retornar o único elemento de.
- defaultValue
- TSource
O valor padrão a ser retornado se a sequência estiver vazia.
Retornos
O único elemento da sequência de entrada ou defaultValue
se a sequência não contiver elementos.
Exceções
source
é null
.
A sequência de entrada contém mais de um elemento.
Aplica-se a
SingleOrDefault<TSource>(IQueryable<TSource>, Expression<Func<TSource,Boolean>>, TSource)
- Origem:
- Queryable.cs
- Origem:
- Queryable.cs
- Origem:
- Queryable.cs
Retorna o único elemento de uma sequência que satisfaz uma condição especificada ou um valor padrão se nenhum elemento desse tipo existir; esse método gerará uma exceção se mais de um elemento atender à condição.
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
Parâmetros de tipo
- TSource
O tipo dos elementos de source
.
Parâmetros
- source
- IQueryable<TSource>
Um IEnumerable<T> do qual retornar um único elemento.
- predicate
- Expression<Func<TSource,Boolean>>
Uma função para testar um elemento para uma condição.
- defaultValue
- TSource
O valor padrão a ser retornado se a sequência estiver vazia.
Retornos
O único elemento da sequência de entrada que satisfaz a condição ou defaultValue
se nenhum elemento desse tipo for encontrado.
Exceções
source
ou predicate
é null
.
Mais de um elemento satisfaz a condição em predicate
.
Aplica-se a
SingleOrDefault<TSource>(IQueryable<TSource>)
- Origem:
- Queryable.cs
- Origem:
- Queryable.cs
- Origem:
- Queryable.cs
Retorna o único elemento de uma sequência ou um valor padrão se a sequência estiver vazia; esse método gerará uma exceção se houver mais de um elemento na sequência.
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
Parâmetros de tipo
- TSource
O tipo dos elementos de source
.
Parâmetros
- source
- IQueryable<TSource>
Um IQueryable<T> para retornar o único elemento de.
Retornos
O único elemento da sequência de entrada ou default
(TSource
) se a sequência não contiver elementos.
Exceções
source
é null
.
source
tem mais de um elemento.
Exemplos
O exemplo de código a seguir demonstra como usar SingleOrDefault<TSource>(IQueryable<TSource>) para selecionar o único elemento de uma matriz. A segunda consulta demonstra que SingleOrDefault<TSource>(IQueryable<TSource>) retorna um valor padrão quando a sequência não contém exatamente um elemento.
// 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!
Às vezes, o valor de default(TSource)
não é o valor padrão que você deseja usar se a coleção não contiver elementos. Em vez de verificar o resultado do valor padrão indesejado e alterá-lo, se necessário, você pode usar o método DefaultIfEmpty<TSource>(IQueryable<TSource>, TSource) para especificar o valor padrão que deseja usar se a coleção estiver vazia. Em seguida, chame Single<TSource>(IQueryable<TSource>) para obter o elemento. O exemplo de código a seguir usa ambas as técnicas para obter um valor padrão de 1 se uma coleção de números de página estiver vazia. Como o valor padrão de um inteiro é 0, que geralmente não é um número de página válido, o valor padrão deve ser especificado como 1. A primeira variável de resultado é verificada quanto ao valor padrão indesejado após a conclusão da consulta. A segunda variável de resultado é obtida chamando DefaultIfEmpty<TSource>(IQueryable<TSource>, TSource) para especificar um valor padrão de 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
Comentários
O método SingleOrDefault<TSource>(IQueryable<TSource>) gera um MethodCallExpression que representa a chamada SingleOrDefault<TSource>(IQueryable<TSource>) si mesmo como um método genérico construído. Em seguida, ele passa o MethodCallExpression para o método Execute<TResult>(Expression) do IQueryProvider representado pela propriedade Provider do parâmetro source
.
O comportamento da consulta que ocorre como resultado da execução de uma árvore de expressão que representa a chamada SingleOrDefault<TSource>(IQueryable<TSource>) depende da implementação do tipo do parâmetro source
. O comportamento esperado é que ele retorna o único elemento em source
ou um valor padrão se source
estiver vazio.
O método SingleOrDefault não fornece uma maneira de especificar um valor padrão. Se você quiser especificar um valor padrão diferente de default(TSource)
, use o método DefaultIfEmpty<TSource>(IQueryable<TSource>, TSource) conforme descrito na seção Exemplo.
Aplica-se a
SingleOrDefault<TSource>(IQueryable<TSource>, Expression<Func<TSource,Boolean>>)
- Origem:
- Queryable.cs
- Origem:
- Queryable.cs
- Origem:
- Queryable.cs
Retorna o único elemento de uma sequência que satisfaz uma condição especificada ou um valor padrão se nenhum elemento desse tipo existir; esse método gerará uma exceção se mais de um elemento atender à condição.
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
Parâmetros de tipo
- TSource
O tipo dos elementos de source
.
Parâmetros
- source
- IQueryable<TSource>
Um IQueryable<T> do qual retornar um único elemento.
- predicate
- Expression<Func<TSource,Boolean>>
Uma função para testar um elemento para uma condição.
Retornos
O único elemento da sequência de entrada que satisfaz a condição em predicate
ou default
(TSource
) se nenhum elemento desse tipo for encontrado.
Exceções
source
ou predicate
é null
.
Mais de um elemento satisfaz a condição em predicate
.
Exemplos
O exemplo de código a seguir demonstra como usar SingleOrDefault<TSource>(IQueryable<TSource>, Expression<Func<TSource,Boolean>>) para selecionar o único elemento de uma matriz que satisfaça uma condição. A segunda consulta demonstra que SingleOrDefault<TSource>(IQueryable<TSource>, Expression<Func<TSource,Boolean>>) retorna um valor padrão quando a sequência não contém exatamente um elemento que satisfaz a condição.
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!
Comentários
Esse método tem pelo menos um parâmetro de tipo Expression<TDelegate> cujo argumento de tipo é um dos tipos de Func<T,TResult>. Para esses parâmetros, você pode passar uma expressão lambda e ela será compilada para um Expression<TDelegate>.
O método SingleOrDefault<TSource>(IQueryable<TSource>, Expression<Func<TSource,Boolean>>) gera um MethodCallExpression que representa a chamada SingleOrDefault<TSource>(IQueryable<TSource>, Expression<Func<TSource,Boolean>>) si mesmo como um método genérico construído. Em seguida, ele passa o MethodCallExpression para o método Execute<TResult>(Expression) do IQueryProvider representado pela propriedade Provider do parâmetro source
.
O comportamento da consulta que ocorre como resultado da execução de uma árvore de expressão que representa a chamada SingleOrDefault<TSource>(IQueryable<TSource>, Expression<Func<TSource,Boolean>>) depende da implementação do tipo do parâmetro source
. O comportamento esperado é que ele retorna o único elemento em source
que satisfaz a condição especificada por predicate
ou um valor padrão se nenhum elemento desse tipo existir.