Entity Framework wybierz odrębną nazwę

138

Jak mogę zrobić to SQLzapytanie z Entity Framework?

SELECT DISTINCT NAME FROM TestAddresses
patrick
źródło

Odpowiedzi:

271

Używanie wyrażenia lambda ...

 var result = EFContext.TestAddresses.Select(m => m.Name).Distinct();
py2020
źródło
1
Może to głupie pytanie, ale czy to zwraca wszystkie adresy do warstwy kodu C #, a następnie je filtruje, czy też przekazuje odpowiednie zapytanie do serwera bazy danych, aby zwrócić tylko unikalne wartości?
środa,
51

Spróbuj tego:

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

W ten sposób otrzymasz IEnumerable<string>- możesz zadzwonić .ToList()do niego, aby uzyskać List<string>.

marc_s
źródło
1
W ten sposób uzyskasz lepszą wydajność niż grupowanie. Odrębne: czas wykonania programu SQL Server: czas procesora = 0 ms, czas, który upłynął = 50 ms. Grupowanie: czas wykonania programu SQL Server: czas procesora = 0 ms, czas, który upłynął = 112 ms.
Andre Mendonca
24

Sposób, w jaki pokazał @alliswell , jest całkowicie ważny i jest inny sposób! :)

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

Mam nadzieję, że komuś się przyda.

Kim Tranjan
źródło
1
było to dla mnie bardzo przydatne, ponieważ musiałem wybrać wiele kolumn
mamashare
16
DBContext.TestAddresses.Select(m => m.NAME).Distinct();

jeśli masz wiele kolumn, zrób tak:

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

W tym przykładzie nie ma zduplikowanego identyfikatora CategoryId ani CategoryName, mam nadzieję, że to pomoże

Muhammad Asad
źródło
4

Entity-Framework Wybierz wyróżniającą nazwę:

Załóżmy, że jeśli używasz widoków, w których używasz wielu tabel i chcesz zastosować odrębne w tym przypadku, najpierw musisz przechowywać wartość w zmiennej, a następnie możesz zastosować Distinct do tej zmiennej, takiej jak ta ...

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

Lub możesz wypróbować ten prosty przykład

Public Function GetUniqueLocation() As List(Of Integer)
          Return db.LoginUsers.Select(Function(p) p.LocID).Distinct().ToList()
End Function
Abdul Khaliq
źródło
Cześć, kiedy robię to na tabeli, pojawia się błąd -> nie mogę przekonwertować ciągu znaków na IEnumreable ... czy możesz mi pokazać, jak uzyskać listę, aby móc wypełnić rozwijaną listę, z różnymi wartościami z kolumny tabeli zawierającej NVARCHAR w EF DB.
Aggie
3

użyć select (). Wyraźny ()

na przykład

DBContext db = new DBContext();
var data= db.User_Food_UserIntakeFood .Select( ).Distinct();
Hossein Hajizadeh
źródło
2

Aby uniknąć ORDER BY items must appear in the select list if SELECT DISTINCTbłędów, najlepiej powinno być

var results = (
    from ta in DBContext.TestAddresses
    select ta.Name
)
.Distinct()
.OrderBy( x => 1);
zwycięzca
źródło
1

Entity-Framework Wybierz wyróżniającą nazwę:

Załóżmy, że chcesz otrzymać wszystkie pierwsze dane z określonej kolumny z każdej grupy;

 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
źródło