Entity Framework selecciona un nombre distinto

Respuestas:

271

Usando la expresión lambda ...

 var result = EFContext.TestAddresses.Select(m => m.Name).Distinct();
py2020
fuente
1
Tal vez sea una pregunta tonta, pero ¿esto devuelve todas las direcciones a la capa de código C # y luego las filtra, o esto pasa la consulta adecuada al servidor de la base de datos para devolver solo los valores únicos?
DA
51

Prueba esto:

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

Esto le dará un IEnumerable<string>- puede llamar .ToList()para obtener un List<string>.

marc_s
fuente
1
De esa forma, obtendrá un mejor rendimiento que la agrupación. Distinto: Tiempos de ejecución de SQL Server: tiempo de CPU = 0 ms, tiempo transcurrido = 50 ms. Agrupación: Tiempos de ejecución de SQL Server: tiempo de CPU = 0 ms, tiempo transcurrido = 112 ms.
Andre Mendonca
24

La forma en que mostró @alliswell es completamente válida, ¡y hay otra forma! :)

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

Espero que sea útil para alguien.

Kim Tranjan
fuente
1
esto fue muy útil para mí ya que necesitaba seleccionar varias columnas
mamashare
16
DBContext.TestAddresses.Select(m => m.NAME).Distinct();

si tiene varias columnas, haga lo siguiente:

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

En este ejemplo, no hay CategoryId duplicado ni CategoryName, espero que esto te ayude

Muhammad Asad
fuente
4

Nombre distintivo de Entity-Framework Select:

Suponga que si está utilizando Vistas en las que está utilizando varias tablas y desea aplicar distintas, en ese caso primero debe almacenar el valor en la variable y luego puede aplicar Distinct en esa variable 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();
        }

O puedes probar este ejemplo simple

Public Function GetUniqueLocation() As List(Of Integer)
          Return db.LoginUsers.Select(Function(p) p.LocID).Distinct().ToList()
End Function
Abdul Khaliq
fuente
Hola, cuando hago esto en una tabla, aparece un error -> no se puede convertir la cadena a IEnumreable ... ¿ puede mostrarme cómo obtener una lista para que pueda completar una lista desplegable, con valores distintos de una columna de tabla que contiene NVARCHAR en EF DB.
aggie
3

use Select (). Distinct ()

por ejemplo

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

Para evitar ORDER BY items must appear in the select list if SELECT DISTINCTerrores, lo mejor debería ser

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

Nombre distintivo de Entity-Framework Select:

Suponga que si quiere los primeros datos de una columna particular 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
fuente