powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / ADO.NET, LINQ, Entity Framework, NHibernate, DAL, ORM [игнор отключен] [закрыт для гостей] / distinct из списка
3 сообщений из 3, страница 1 из 1
distinct из списка
    #36404781
Фотография Sv219
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
имеется некий список List<Metadata> из него надо получить все различные записи. Сделал следующее:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
        var distinctMetadataList = metadataList.Distinct(new MetadataComparer());

        private class MetadataComparer : IEqualityComparer<Metadata>
        {
            public bool Equals(Metadata x, Metadata y)
            {
                if ((x.Isbn == y.Isbn || x.Ebook.PrintIsbn == y.Ebook.PrintIsbn)
                    && x.CreditorId == y.CreditorId)
                {
                    return true;
                }

                return false;
            }

            public int GetHashCode(Metadata obj)
            {
                string z = obj.Isbn + obj.Ebook.PrintIsbn + obj.CreditorId;
                return z.GetHashCode();
            }
        }
НО здесь меня смущает строка string z = obj.Isbn + obj.Ebook.PrintIsbn + obj.CreditorId; в методе public int GetHashCode(Metadata obj)... изза нее не работает.

Как правильно поступить в моем случае?
...
Рейтинг: 0 / 0
distinct из списка
    #36406788
Фотография WYPMAH
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Sv219
гляньте такой пример, мб найдете свою ошибку:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
        public class SomeClass
        {
            public int ID { get; set; }
            public string Value { get; set; }
        }

        public class SomeClassComparer : IEqualityComparer<SomeClass>
        {
            #region IEqualityComparer<SomeClass> Members

            public bool Equals(SomeClass x, SomeClass y)
            {
                return (x.ID.Equals(y.ID) && x.Value.Equals(y.Value));
            }

            public int GetHashCode(SomeClass obj)
            {
                object temp = obj.ID + obj.Value;
                return temp.GetHashCode();
            }

            #endregion
        }

        static void Main(string[] args)
        {
            List<SomeClass> list = new List<SomeClass>();
            list.Add(new SomeClass() { ID = 1, Value = "qwe" });
            list.Add(new SomeClass() { ID = 2, Value = "asd" });
            list.Add(new SomeClass() { ID = 3, Value = "zxc" });
            list.Add(new SomeClass() { ID = 4, Value = "qwe" });
            list.Add(new SomeClass() { ID = 1, Value = "qwe" });

            Console.WriteLine("Original list:");
            list.ForEach(a => Console.WriteLine(string.Format("{0} - {1}", a.ID, a.Value)));

            Console.WriteLine(Environment.NewLine + "Distinct list:");
            list.Distinct(new SomeClassComparer()).ToList().ForEach(a => Console.WriteLine(string.Format("{0} - {1}", a.ID, a.Value)));

            Console.ReadKey();
        }

_______________
AnimeBay - аниме магазин, который Вас не разочарует.
...
Рейтинг: 0 / 0
distinct из списка
    #36408493
зы
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
У него проблема в том что условие Equals содержит неоднозначность, "или или". Хэш код неоднозначности посчитать нельзя. Как вариант можно вернуть из GetHashCode() константу. Это немного увеличит затраты но должно решить проблему.
...
Рейтинг: 0 / 0
3 сообщений из 3, страница 1 из 1
Форумы / ADO.NET, LINQ, Entity Framework, NHibernate, DAL, ORM [игнор отключен] [закрыт для гостей] / distinct из списка
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]