Entity Framework selecione nome distinto

138

Como posso fazer essa SQLconsulta Entity Framework?

SELECT DISTINCT NAME FROM TestAddresses
patrick
fonte

Respostas:

271

Usando expressão lambda ..

 var result = EFContext.TestAddresses.Select(m => m.Name).Distinct();
py2020
fonte
1
Talvez seja uma pergunta idiota, mas isso retorna todos os endereços para a camada de código C # e os filtra ou passa a consulta apropriada ao servidor de banco de dados para retornar apenas os valores exclusivos?
DA
51

Tente o seguinte:

var results = (from ta in context.TestAddresses
               select ta.Name).Distinct();

Isso lhe dará um IEnumerable<string>- você pode chamá .ToList()-lo para obter um List<string>.

marc_s
fonte
1
Dessa forma, obtém melhor desempenho do que o agrupamento. Distinto: Tempo de execução do SQL Server: tempo de CPU = 0 ms, tempo decorrido = 50 ms. Agrupamento: tempos de execução do SQL Server: tempo de CPU = 0 ms, tempo decorrido = 112 ms.
Andre Mendonca
24

A maneira como o @alliswell mostrou é completamente válida, e há outra maneira! :)

var result = EFContext.TestAddresses
    .GroupBy(ta => ta.Name)
    .Select(ta => ta.Key);

Espero que seja útil para alguém.

Kim Tranjan
fonte
1
isso foi muito útil para mim desde que eu precisava para selecionar várias colunas
mamashare
16
DBContext.TestAddresses.Select(m => m.NAME).Distinct();

se você tiver várias colunas, faça o seguinte:

DBContext.TestAddresses.Select(m => new {m.NAME, m.ID}).Distinct();

Neste exemplo, sem CategoryId duplicado e sem CategoryName, espero que isso ajude você

Muhammad Asad
fonte
4

Nome distinto de seleção da estrutura da entidade:

Suponha que, se você estiver usando Views nas quais você está usando várias tabelas e queira aplicar distintas nesse caso, primeiro tenha que armazenar valor na variável e, em seguida, aplique Distinct nessa variável como esta.

public List<Item_Img_Sal_VIEW> GetItemDescription(int ItemNo) 
        {
            var Result= db.Item_Img_Sal_VIEW.Where(p => p.ItemID == ItemNo).ToList();
            return Result.Distinct().ToList();
        }

Ou você pode tentar este exemplo simples

Public Function GetUniqueLocation() As List(Of Integer)
          Return db.LoginUsers.Select(Function(p) p.LocID).Distinct().ToList()
End Function
Abdul Khaliq
fonte
Oi, quando faço isso em uma tabela, recebo um erro -> não é possível converter a seqüência de caracteres para IEnumreable .. você pode me mostrar como obter uma lista para que eu possa preencher uma lista suspensa, com valores distintos de uma coluna da tabela que contém NVARCHAR no EF DB.
aggie
3

use Select (). Distinct ()

por exemplo

DBContext db = new DBContext();
var data= db.User_Food_UserIntakeFood .Select( ).Distinct();
Hossein Hajizadeh
fonte
2

Para evitar ORDER BY items must appear in the select list if SELECT DISTINCTerros, o melhor deve ser

var results = (
    from ta in DBContext.TestAddresses
    select ta.Name
)
.Distinct()
.OrderBy( x => 1);
vencedor
fonte
1

Nome distinto de seleção da estrutura da entidade:

Suponha que você queira todos os primeiros dados da coluna específica de cada grupo;

 var data = objDb.TableName.GroupBy(dt => dt.ColumnName).Select(dt => new { dt.Key }).ToList();

            foreach (var item in data)
            {
                var data2= objDb.TableName.Where(dt=>dt.ColumnName==item.Key).Select(dt=>new {dt.SelectYourColumn}).Distinct().FirstOrDefault();

               //Eg.
                {
                       ListBox1.Items.Add(data2.ColumnName);                    
                }

            }
Prajapati Gautam
fonte