Модераторы: gambit
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> DISTINCT в Entity SQL и LINQ 
:(
    Опции темы
andrew8172
Дата 31.3.2009, 11:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 6
Регистрация: 6.6.2006

Репутация: нет
Всего: нет



Пытаюсь заполнить treeView, соответственно дублирующиеся значения мне не нужны. Пробовал использовать Distinct, но что с ним, что без него - разницы никакой. Дублирующиеся записи всё равно есть.

Это с LINQ:
Код

                        StudentsEntities students = new StudentsEntities();
                        var query = (from c in students.Groups
                                     where c.Faculties.FacID == 1
                                     select c).Distinct();
                        foreach (Groups c in query)
                        {
                            treeView1.Nodes[i].Nodes.Add(c.T_Course);
                        }


Это с Entity SQL:
Код

                        int x = 1;
                        ObjectQuery<Groups> query = students.CreateQuery<Groups>(
                          "SELECT VALUE DISTINCT c FROM Groups AS c WHERE c.Faculties.FacID = @FacID",
                          new ObjectParameter("FacID", x)
                        );
                        foreach (Groups c in query)
                        {
                            treeView1.Nodes[i].Nodes.Add(c.T_Course);
                        }

PM MAIL WWW   Вверх
Idsa
Дата 31.3.2009, 11:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник
Сообщений: 2086
Регистрация: 5.12.2006
Где: Томск

Репутация: 5
Всего: 62



andrew8172, если не ошибаюсь, то, в терминах SQL, Distinct убирает из Select'а только полностью идентичные записи (то есть записи, в которых совпадают все атрибуты). Сомневаюсь, что в Вашей базе есть такие записи... (ибо если первичный ключ автоинкрементный, то такая ситуация уже невозможна).
Итак, что Вы имеете в виду под дублирующимися записями?


--------------------
Мой блог: alexidsa.blogspot.com
PM MAIL ICQ   Вверх
andrew8172
Дата 31.3.2009, 20:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 6
Регистрация: 6.6.2006

Репутация: нет
Всего: нет



smile Я понимаю. Конечно, таких записей нет.
Приложил таблицу Groups. Говоря обычным SQL-овским языком мне надо SELECT DISTINCT T_Course FROM Groups WHERE ((N_Fac)= 1)

Это сообщение отредактировал(а) andrew8172 - 31.3.2009, 21:05

Присоединённый файл ( Кол-во скачиваний: 6 )
Присоединённый файл  Select.jpg 12,15 Kb
PM MAIL WWW   Вверх
Idsa
Дата 31.3.2009, 21:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник
Сообщений: 2086
Регистрация: 5.12.2006
Где: Томск

Репутация: 5
Всего: 62



andrew8172, теперь ясно.
В первом посте Вы привели код, где полностью считывается запись группы (со всем атрибутами), поэтому Distinct не дает никакого эффекта:
Код

SELECT DISTINCT * FROM ...

Если бы Вы выбирали только T_Course, как указали здесь:
Цитата(andrew8172 @  1.4.2009,  00:44 Найти цитируемый пост)
SELECT DISTINCT T_Course FROM Groups WHERE ((N_Fac)= 1)

, то Distinct бы сработал.

Если же нужно выбрать все атрибуты, можно использовать другую перегрузку Distinct (с параметром IEqualityComparer) и уже на клиенте (через Linq To Objects) отобрать записи.


--------------------
Мой блог: alexidsa.blogspot.com
PM MAIL ICQ   Вверх
andrew8172
Дата 1.4.2009, 09:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 6
Регистрация: 6.6.2006

Репутация: нет
Всего: нет



Сделал так:
Код

                        StudentsEntities students = new StudentsEntities();
                        var query = (from c in students.Groups
                                    where c.Faculties.FacID == 1
                                    select c.T_Course).Distinct();


И потом здесь:
Код

                        foreach (var c in query)
                        {
                            treeView1.Nodes[0].Nodes.Add(c.ToString());
                        }

выдаёт эксепшен на первой строчке в слове query : При выполнении определения команды произошла ошибка. Подробные сведения см. во внутреннем исключении.

Это сообщение отредактировал(а) andrew8172 - 1.4.2009, 09:38
PM MAIL WWW   Вверх
andrew8172
Дата 1.4.2009, 10:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 6
Регистрация: 6.6.2006

Репутация: нет
Всего: нет



Разобрался. У меня в БД поле T_Course было text, а к полям такого типа distinct не применяется. Изменил на nvarchar - всё заработало
PM MAIL WWW   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | LINQ (Language-Integrated Query) | Следующая тема »


 




[ Время генерации скрипта: 0.0423 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.