Resumo : neste tutorial, você aprenderá como usar o Single()
método LINQ para retornar um único elemento de uma sequência que satisfaça uma condição.
Introdução ao método LINQ Single()
O método LINQ Single()
retorna um e somente um elemento de uma sequência que satisfaz uma condição especificada.
Aqui está a sintaxe do Single()
método:
public static TSource Single<TSource> (
IEnumerable<TSource> source,
Func<TSource,bool> predicate
);
Linguagem de código: C# ( cs )
Nesta sintaxe:
TSource
é o tipo de elementos dasource
sequência.source
é umIEnumerable<T>
que contém elementos.predicate
é uma função que testa um elemento para uma condição.
O Single()
método retorna um único elemento com o tipo TSource
da source
sequência.
Se dois ou mais desses elementos ou nenhum elemento existir, o Single()
método lança uma exceção. Se source
ou predicate
for null
, o Single()
método lançará um ArgumentNullException
.
O Single()
método possui uma sobrecarga que não possui nenhum argumento:
public static TSource Single<TSource> (
IEnumerable<TSource> source
);
Linguagem de código: C# ( cs )
Neste caso, o Single()
método retorna um único elemento da source
sequência. Se a source
sequência tiver mais de um elemento, o Single()
método lançará um InvalidOperationException
.
Exemplo de LINQ Single()
O programa a seguir demonstra como usar o Single()
método para selecionar um único funcionário de uma lista de funcionários:
using static System.Console;
class Employee
{
public int? Id { get; set; }
public string? Name { get; set; }
public int Salary { get; set; }
}
class Program
{
public static void Main()
{
var employees = new List<Employee>()
{
new Employee { Id = 1, Name = "John", Salary = 50000 },
new Employee { Id = 2, Name = "Jane", Salary = 60000 },
new Employee { Id = 3, Name = "Bob", Salary = 45000 },
new Employee { Id = 4, Name = "Sara", Salary = 55000 },
new Employee { Id = 5, Name = "Tom", Salary = 65000 }
};
var employee = employees.Single(e => e.Id == 1);
WriteLine($"{employee.Id} - {employee.Name}");
}
}
Linguagem de código: C# ( cs )
Saída:
1 - John
Linguagem de código: C# ( cs )
Como funciona.
Primeiro, defina a Employee
classe que possui três propriedades Id
,, Name
e Salary
:
class Employee
{
public int? Id { get; set; }
public string? Name { get; set; }
public int Salary { get; set; }
}
Linguagem de código: C# ( cs )
Segundo, crie uma nova lista de funcionários:
var employees = new List<Employee>()
{
new Employee { Id = 1, Name = "John", Salary = 50000 },
new Employee { Id = 2, Name = "Jane", Salary = 60000 },
new Employee { Id = 3, Name = "Bob", Salary = 45000 },
new Employee { Id = 4, Name = "Sara", Salary = 55000 },
new Employee { Id = 5, Name = "Tom", Salary = 65000 }
};
Linguagem de código: C# ( cs )
Terceiro, selecione um único funcionário com id 1 usando o Single()
método. O Single()
método retorna um único Employee
objeto:
var employee = employees.Single(e => e.Id == 1);
Linguagem de código: C# ( cs )
Finalmente, escreva o Employee
objeto no console:
WriteLine($"{employee.Id} - {employee.Name}");
Linguagem de código: C# ( cs )
Método SingleOrDefault
Se quiser retornar um valor padrão se nenhum elemento em uma sequência satisfizer uma condição, você pode usar o SingleOrDefault()
método:
public static TSource? SingleOrDefault<TSource> (
this IEnumerable<TSource> source,
Func<TSource,bool> predicate,
TSource defaultValue
);
Linguagem de código: C# ( cs )
Por exemplo:
using Models;
using static System.Console;
class Employee
{
public int? Id { get; set; }
public string? Name { get; set; }
public int Salary { get; set; }
}
class Program
{
public static void Main()
{
var employees = new List<Employee>()
{
new Employee { Id = 1, Name = "John", Salary = 50000 },
new Employee { Id = 2, Name = "Jane", Salary = 60000 },
new Employee { Id = 3, Name = "Bob", Salary = 45000 },
new Employee { Id = 4, Name = "Sara", Salary = 55000 },
new Employee { Id = 5, Name = "Tom", Salary = 65000 }
};
var employee = employees.SingleOrDefault(e => e.Id == 10, null);
if (employee != null)
{
WriteLine($"{employee.Id} - {employee.Name}");
}
else
{
WriteLine("The element was not found.");
}
}
}
Linguagem de código: C# ( cs )
Saída:
The element was not found.
Linguagem de código: C# ( cs )
Neste exemplo, a employees
lista não possui nenhum Employee
objeto com id 10. Portanto, o SingleOrDefault()
método retorna null
como valor padrão.
Resumo
- Use o método LINQ
Single()
para retornar um único elemento de uma sequência que satisfaça uma condição.