Entity Framework sélectionnez un nom distinct


Réponses:


271

Utilisation de l'expression lambda.

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

1
Peut-être une question idiote, mais cela renvoie-t-il toutes les adresses à la couche de code C # puis les filtre, ou est-ce que cela transmet la requête appropriée au serveur de base de données pour ne renvoyer que les valeurs uniques?
DA

51

Essaye ça:

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

Cela vous donnera un IEnumerable<string>- vous pouvez faire appel .ToList()à lui pour obtenir un fichier List<string>.


1
De cette façon, obtenez de meilleures performances que le regroupement. Distinct: temps d'exécution de SQL Server: temps CPU = 0 ms, temps écoulé = 50 ms. Regroupement: Temps d'exécution de SQL Server: temps CPU = 0 ms, temps écoulé = 112 ms.
Andre Mendonca

24

La façon dont @alliswell a montré est tout à fait valable, et il y a une autre façon! :)

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

J'espère que ça sera utile à quelqu'un.


1
cela a été très utile pour moi car je devais sélectionner plusieurs colonnes
mamashare

16
DBContext.TestAddresses.Select(m => m.NAME).Distinct();

si vous avez plusieurs colonnes, procédez comme suit:

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

Dans cet exemple, pas de CategoryId en double et pas de CategoryName j'espère que cela vous aidera


4

Entity-Framework Sélectionnez un nom distinct:

Supposons que si vous utilisez des vues dans lesquelles vous utilisez plusieurs tables et que vous voulez appliquer distinct dans ce cas, vous devez d'abord stocker la valeur dans la variable et ensuite vous pouvez appliquer Distinct sur cette variable comme celle-ci ...

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 vous pouvez essayer cet exemple simple

Public Function GetUniqueLocation() As List(Of Integer)
          Return db.LoginUsers.Select(Function(p) p.LocID).Distinct().ToList()
End Function

Bonjour, quand je fais cela sur une table, j'obtiens une erreur -> impossible de convertir la chaîne en IEnumreable .. pouvez-vous me montrer comment obtenir une liste afin que je puisse remplir une liste déroulante, avec des valeurs distinctes d'une colonne de table contenant NVARCHAR dans EF DB.
aggie

3

utilisez Select (). Distinct ()

par exemple

DBContext db = new DBContext();
var data= db.User_Food_UserIntakeFood .Select( ).Distinct();

2

Afin d'éviter les ORDER BY items must appear in the select list if SELECT DISTINCTerreurs, le meilleur devrait être

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

1

Entity-Framework Sélectionnez un nom distinct:

Supposons que vous vouliez toutes les premières données d'une colonne particulière de chaque groupe;

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

            }
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.