Entity Framework wählt einen eindeutigen Namen aus

137

Wie kann ich diese SQLAbfrage durchführen Entity Framework?

SELECT DISTINCT NAME FROM TestAddresses
Patrick
quelle

Antworten:

270

Verwenden des Lambda-Ausdrucks.

 var result = EFContext.TestAddresses.Select(m => m.Name).Distinct();
py2020
quelle
1
Vielleicht eine blöde Frage, aber werden dadurch alle Adressen an die C # -Code-Schicht zurückgegeben und dann gefiltert, oder wird die entsprechende Abfrage an den Datenbankserver übergeben, um nur die eindeutigen Werte zurückzugeben?
DA
51

Versuche dies:

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

Dies gibt Ihnen eine IEnumerable<string>- Sie können es anrufen .ToList(), um eine zu bekommen List<string>.

marc_s
quelle
1
Auf diese Weise erhalten Sie eine bessere Leistung als beim Gruppieren. Unterscheidbar: SQL Server-Ausführungszeiten: CPU-Zeit = 0 ms, verstrichene Zeit = 50 ms. Gruppierung: SQL Server-Ausführungszeiten: CPU-Zeit = 0 ms, verstrichene Zeit = 112 ms.
Andre Mendonca
24

Die Art und Weise, wie @alliswell gezeigt hat, ist völlig gültig, und es gibt noch einen anderen Weg! :) :)

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

Ich hoffe, es wird jemandem nützlich sein.

Kim Tranjan
quelle
1
Dies war sehr nützlich für mich, da ich mehrere Spalten auswählen musste
mamashare
16
DBContext.TestAddresses.Select(m => m.NAME).Distinct();

Wenn Sie mehrere Spalten haben, gehen Sie wie folgt vor:

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

In diesem Beispiel keine doppelte CategoryId und kein CategoryName. Ich hoffe, dies wird Ihnen helfen

Muhammad Asad
quelle
4

Entity-Framework Wählen Sie einen eindeutigen Namen:

Angenommen, Sie verwenden Ansichten, in denen Sie mehrere Tabellen verwenden, und möchten in diesem Fall einen eindeutigen Wert anwenden. Zuerst müssen Sie den Wert in der Variablen speichern und dann können Sie Distinct auf diese Variable wie diese anwenden.

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

Oder Sie können dieses einfache Beispiel ausprobieren

Public Function GetUniqueLocation() As List(Of Integer)
          Return db.LoginUsers.Select(Function(p) p.LocID).Distinct().ToList()
End Function
Abdul Khaliq
quelle
Hallo, wenn ich dies für eine Tabelle mache, wird eine Fehlermeldung angezeigt -> Zeichenfolge kann nicht in IEnumreable konvertiert werden. Können Sie mir zeigen, wie eine Liste abgerufen wird, damit ich eine Dropdown-Liste mit unterschiedlichen Werten aus einer Tabellenspalte mit NVARCHAR füllen kann? in EF DB.
Aggie
3

Verwenden Sie

zum Beispiel Select (). Distinct ()

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

Um ORDER BY items must appear in the select list if SELECT DISTINCTFehler zu vermeiden , sollte das Beste sein

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

Entity-Framework Wählen Sie einen eindeutigen Namen:

Angenommen, Sie möchten alle ersten Daten einer bestimmten Spalte jeder Gruppe.

 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
quelle