Entity Framework wählt einen eindeutigen Namen aus


Antworten:


270

Verwenden des Lambda-Ausdrucks.

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

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>.


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.


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


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

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

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

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

            }
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.