2015-08-07 4 views
0

У меня есть таблица базы данных с большим количеством данных. Есть один атрибут, который я хотел бы извлечь из него. Этот атрибут обычно одинаковый для каждой записи. Существует три ее варианта. Возможно ли получить эти три варианта в списке без прохождения через всю базу данных.C# - Извлечение уникальных данных из таблицы SQL

Например, я не хочу, чтобы выполнить следующие действия для повышения эффективности:

foreach (var x in table) 
{ 
    list.Add(x.attribute); 
{ 

Я бы так же, как уникальные атрибуты и игнорировать все лишние из них. Я предполагаю, что если бы я просто сделал if (notSeen()), он все равно переместился бы через стол и не сэкономил бы много работы.

Есть ли какие-либо инструменты, которые помогут в этом процессе?

+2

Использовать SQL-запрос, который фильтрует результирующий набор? –

+0

Просто группировка этой колонкой – neo

+1

вы имеете в виду [Distinct] (http://www.w3schools.com/sql/sql_distinct.asp)? – DrewJordan

ответ

1

Предполагая, что вы используете LINQ to SQL/Entities, наверняка это возможно сделать на уровне БД. Вы можете сделать это как это (LINQ to Entities, который переводит на SQL с оператором DISTINCT/GroupBy): table.Select(k=>k.attribute).Distinct();. Если имеется более одного группового ключа, вы также можете использовать этот синтаксис: table.GroupBy(k=>new{k.ItemOne, k.ItemTwo}).Select(k=>k.First());

Надеюсь, что эта помощь.

+0

Это было именно то, что я искал, я думаю, я искал что-то более сложное. Благодарю. – Jon

+0

Получение всей таблицы из базы данных, а затем вызов 'Distinct (...)' будет по-прежнему перебирать каждый элемент. Линк просто делает это под обложками. Если у вас есть доступ к базе данных, скорее всего, вам будет проще сделать запрос, который даст отличные результаты. – carpenter

+0

LINQ переводит выражение «Distinct» в SQL и не извлекает всю таблицу (пока вы не вызываете AsEnumerable(), ToArray() или что-то подобное до того, как эта сила получит всю таблицу). –

Смежные вопросы