LINQ Único

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 da sourcesequência.
  • sourceé um IEnumerable<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 TSourceda sourcesequência.

Se dois ou mais desses elementos ou nenhum elemento existir, o Single()método lança uma exceção. Se sourceou predicatefor 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 sourcesequência. Se a sourcesequê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 - JohnLinguagem de código:  C#  ( cs )

Como funciona.

Primeiro, defina a Employeeclasse que possui três propriedades Id,, Namee 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 Employeeobjeto:

var employee = employees.Single(e => e.Id == 1);Linguagem de código:  C#  ( cs )

Finalmente, escreva o Employeeobjeto 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 employeeslista não possui nenhum Employeeobjeto com id 10. Portanto, o SingleOrDefault()método retorna nullcomo 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.

Deixe um comentário

O seu endereço de email não será publicado. Campos obrigatórios marcados com *