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

Entity-Framework Выберите отличительное имя:

Предположим, что если вы используете представления, в которых вы используете несколько таблиц, и вы хотите применить отличные в этом случае, сначала вы должны сохранить значение в переменной, а затем вы можете применить 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.
Агги


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

Entity-Framework Выберите отличительное имя:

Предположим, что вам нужны все первые данные определенного столбца каждой группы;

 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.