Entity Framework вибирає окрему назву


Відповіді:


271

Використовуючи лямбда-вираз ..

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

1
Можливо, задалеке запитання, але чи повертає це всі адреси до рівня коду C # і потім фільтрує їх, або це передає відповідний запит серверу бази даних, щоб повернути лише унікальні значення?
DA

51

Спробуйте це:

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

Це дасть вам IEnumerable<string>- ви можете зателефонувати .ToList()на нього, щоб отримати List<string>.


1
Таким чином ви отримаєте кращі показники, ніж групування. Відмінні: Часи виконання SQL Server: час процесора = 0 мс, минулий час = 50 мс. Групування: Часи виконання SQL Server: час процесора = 0 мс, минулий час = 112 мс.
Андре Мендонка

24

Спосіб, який показав @alliswell , цілком справедливий, і є інший шлях! :)

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

Сподіваюся, комусь це стане в нагоді.


1
це було дуже корисно для мене, оскільки мені потрібно було вибрати кілька колонок
mamashare

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

якщо у вас є кілька стовпців, виконайте це так:

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

У цьому прикладі жодних дублікатів CategoryId і немає CategoryName, сподіваюся, це допоможе вам


4

Вибір чіткої назви сутності-рамки:

Припустимо, якщо ви використовуєте представлення, в якому ви використовуєте кілька таблиць, і ви хочете застосувати різні в цьому випадку, спочатку вам потрібно зберегти значення у змінній, а потім ви можете застосувати Distinct до цієї змінної, як ця ....

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

Або ви можете спробувати цей простий приклад

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

Привіт, коли я роблю це на столі, я отримую помилку -> не можу перетворити рядок у IEnumreable .. чи можете ви мені показати, як отримати список, щоб я міг заповнити випадаючий список з різними значеннями зі стовпця таблиці, що містить NVARCHAR в EF DB.
aggie


2

Щоб уникнути ORDER BY items must appear in the select list if SELECT DISTINCTпомилок, найкраще має бути

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

1

Вибір чіткої назви сутності-рамки:

Припустимо, якщо вам потрібні всі перші дані певного стовпця кожної групи;

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

            }
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.