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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Запрос на исключение 
:(
    Опции темы
Stratus
Дата 21.8.2011, 16:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Пожалуйста посоветуйте запрос на выбор из списка А значений которых нет в списке В....

Добавлено через 1 минуту и 16 секунд
Пытаюсь создать что то типа этого:
Код

  class Program
    {
        static void Main()
        {

            List<Obj> List_a = new List<Obj>();

            List_a.Add(new Obj("Словарь", "1"));
            List_a.Add(new Obj("Букварь", "2"));
            List_a.Add(new Obj("2 мегабайта", "3"));
            List_a.Add(new Obj("АРС", "программа"));

            List<Obj> List_b = new List<Obj>();

            List_b.Add(new Obj("Руководство", "1"));
            List_b.Add(new Obj("О главном", "2"));
            List_b.Add(new Obj("3 мегабайта", "3"));
            List_b.Add(new Obj("стул", "3"));

            var q1 =
                from c in List_a
                join p in List_b on c.category equals p.category
                select c;

            var q2 =
                from ListA in List_a
                from ListB in List_b
                where ListA.category != ListB.category
                select ListA.name;
 
            foreach (var v in q2)
                Console.WriteLine(v);

            Console.ReadLine();
        }
    }

    class Obj
    {
        private string Name;
        private string Category;

        internal Obj(string Name, string Category)
        {
            this.Name = Name;
            this.Category = Category;
        }

        public string name { get { return Name; } }
        public string category { get { return Category; } }
    }

PM MAIL   Вверх
KelTron
Дата 21.8.2011, 17:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Для начала нужно понять по какому критерию сравнивать объекты и создать для этого класс, например если сравнивать по имени:
Код

class MyComparer : IEqualityComparer<Obj>
{
    public bool Equals(Obj x, Obj y)
    {
        return x.name == y.name;
    }

    public int GetHashCode(Obj obj)
    {
        return obj.name.GetHashCode();
    }
}

Тогда запрос будет выглядеть так:
Код

var result = List_a.Except(List_b, new MyComparer());



--------------------
Тысячами незримых нитей обвивает тебя Закон. Разрубишь одну - преступник. Десять - смертник. Все - Бог.
Эвенгар Салладорский, основатель Школы Тьмы.
PM MAIL   Вверх
Stratus
Дата 21.8.2011, 20:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



KelTron спасибо, но все равно не корректные результаты выдает.
Выдается полный список List_a,
а должно выдаваться первые 3 строки

Код

        static void Main()
        {
            List<Obj> List_a = new List<Obj>();

            List_a.Add(new Obj("Словарь", "1"));
            List_a.Add(new Obj("Букварь", "2"));
            List_a.Add(new Obj("2 мегабайта", "3"));
            List_a.Add(new Obj("АРС", "программа"));

            List<Obj> List_b = new List<Obj>();

            List_b.Add(new Obj("Руководство", "1"));
            List_b.Add(new Obj("О главном", "2"));
            List_b.Add(new Obj("3 мегабайта", "3"));
            List_b.Add(new Obj("АРС", "4"));

            var q2 = List_a.Except(List_b, new UniversalComparer() );
 
            foreach (var v in q2)
                Console.WriteLine(v.name);

            Console.ReadLine();
        }
    }

    class Obj
    {
        private string Name;
        private string Category;

        internal Obj(string Name, string Category)
        {
            this.Name = Name;
            this.Category = Category;
        }

        public string name { get { return Name; } }
        public string category { get { return Category; } }
    }

    class UniversalComparer : IEqualityComparer<Obj>
    {
        public bool Equals(Obj x, Obj y)
        {
            return x.category == y.category;
        }
        public int GetHashCode(Obj obj)
        {
            return obj.GetHashCode();
        }
    }


Это сообщение отредактировал(а) Stratus - 21.8.2011, 20:39
PM MAIL   Вверх
KelTron
Дата 22.8.2011, 13:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Потому что UniversalComparer некорректен.
1. Сравнение не по тому полю x.category == y.category;
2. Метод GetHashCode реализован неверно.

Если возьмёшь компэйрер из моего поста, у тебя всё заработает..


--------------------
Тысячами незримых нитей обвивает тебя Закон. Разрубишь одну - преступник. Десять - смертник. Все - Бог.
Эвенгар Салладорский, основатель Школы Тьмы.
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
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.