Entity Framework selecione nome distinto


Respostas:


271

Usando expressão lambda ..

 var result = EFContext.TestAddresses.Select(m => m.Name).Distinct();

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>.


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.


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ê


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

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();

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);

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);                    
                }

            }
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.