Entity Framework sélectionnez un nom distinct

138

Comment puis-je faire cette SQLrequête avec Entity Framework?

SELECT DISTINCT NAME FROM TestAddresses
patrick
la source

Réponses:

271

Utilisation de l'expression lambda.

 var result = EFContext.TestAddresses.Select(m => m.Name).Distinct();
py2020
la source
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>.

marc_s
la source
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.

Kim Tranjan
la source
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

Muhammad Asad
la source
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
Abdul Khaliq
la source
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();
Hossein Hajizadeh
la source
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);
vainqueur
la source
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);                    
                }

            }
Prajapati Gautam
la source