Entity Framework seleziona un nome distinto


Risposte:


271

Usando l'espressione lambda ..

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

1
Forse una domanda daft, ma questo restituisce tutti gli indirizzi al livello di codice C # e quindi li filtra, oppure passa la query appropriata al server di database per restituire solo i valori univoci?
DA

51

Prova questo:

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

Questo ti darà un IEnumerable<string>- puoi chiamarlo .ToList()per ottenere un List<string>.


1
In questo modo ottieni prestazioni migliori rispetto al raggruppamento. Distinto: tempi di esecuzione di SQL Server: tempo CPU = 0 ms, tempo trascorso = 50 ms. Raggruppamento: tempi di esecuzione di SQL Server: tempo CPU = 0 ms, tempo trascorso = 112 ms.
Andre Mendonca,

24

Il modo in cui @alliswell ha mostrato è completamente valido, e c'è un altro modo! :)

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

Spero che sia utile a qualcuno.


1
questo è stato molto utile per me poiché avevo bisogno di selezionare più colonne
mamashare l'

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

se hai più colonne fai così:

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

In questo esempio nessun duplicato di CategoryId e nessun CategoryName spero che questo ti possa aiutare


4

Entity-Framework Seleziona nome distinto:

Supponiamo che tu stia utilizzando Views in cui stai utilizzando più tabelle e in questo caso desideri applicare distinti in quel caso, prima devi memorizzare il valore in variabile e quindi puoi applicare Distinct su quella variabile come questa ....

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

Oppure puoi provare questo semplice esempio

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

Ciao, quando lo faccio su una tabella, ottengo un errore -> impossibile convertire la stringa in IEnumreable .. puoi mostrarmi come ottenere un elenco in modo da poter popolare un elenco a discesa, con valori distinti da una colonna della tabella contenente NVARCHAR in EF DB.
aggie,

3

usare Select (). Distinct ()

per esempio

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

2

Al fine di evitare ORDER BY items must appear in the select list if SELECT DISTINCTerrori, il migliore dovrebbe essere

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

1

Entity-Framework Seleziona nome distinto:

Supponiamo che tu voglia ogni primo dato di una particolare colonna di ciascun gruppo;

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

            }
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.