powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / ADO.NET, LINQ, Entity Framework, NHibernate, DAL, ORM [игнор отключен] [закрыт для гостей] / Исключающее объединение коллекций, LINQ
10 сообщений из 10, страница 1 из 1
Исключающее объединение коллекций, LINQ
    #36494082
VitaliyBoris
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Доброго всем времени :) Подскажите, как с помощью LINQ получить исключающее объединение двух коллекций. Сравнивать нужно только Title и Published.

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
public class Item
{
   public int Id{get; set;}
   public string Title {get; set;}
   public string Desc {get; set;}
   public DateTime Published {get; set;}
}

IEnumerable<Item> items1, items2;

Заранее спасибо.
...
Рейтинг: 0 / 0
Исключающее объединение коллекций, LINQ
    #36494123
Фотография bured
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Переопределить Equals для класса и воспользоваться операцией Except
...
Рейтинг: 0 / 0
Исключающее объединение коллекций, LINQ
    #36494171
Фотография МСУ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
IEqualityComparer
...
Рейтинг: 0 / 0
Исключающее объединение коллекций, LINQ
    #36494235
Фотография bured
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: 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.
41.
42.
43.
44.
45.
46.
47.
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;

namespace EqTest
{
    public class Item
    {
        public int Id { get; set; }
        public string Title { get; set; }
        public string Desc { get; set; }
        public DateTime Published { get; set; }

        public Item()
        { }

        public Item(int id, string title, string desc, DateTime published)
        {
            this.Id = id;
            this.Title = title;
            this.Desc = desc;
            this.Published = published;
        }

        public override bool Equals(System.Object obj)
        {
            // If parameter is null return false.
            if (obj == null)
            {
                return false;
            }

            // If parameter cannot be cast to Point return false.
            Item item = obj as Item;
            if ((System.Object)item == null)
            {
                return false;
            }

            // Return true if the fields match:
            return (Title == item.Title) && (Desc == item.Title);
        }


    }
}
Код: 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.
using System;
using System.Collections.Generic;
using System.Collections;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;

namespace EqTest
{
    public partial class _Default : System.Web.UI.Page
    {
        protected void Page_Load(object sender, EventArgs e)
        {
            List<Item> items1 = new List<Item>(); 
            List<Item> items2 = new List<Item>();
            items1.Add(new Item(1, "Professional ASP.NET 3.5", "McDonald", DateTime.Parse("01.01.2009")));
            items2.Add(new Item(1, "Beginner ASP.NET 3.5", "McDonald", DateTime.Parse("01.01.2009")));
            items2.Add(new Item(2, "Professional ASP.NET 3.5", "McDonald", DateTime.Parse("01.01.2009")));
            items2.Add(new Item(2, "Professional ASP.NET 3.5", "Esposito", DateTime.Parse("01.01.2009")));
            IEnumerable<Item> result = items2.Except(items1);
            GridView1.DataSource = result.ToList();
            DataBind();
        }
    }
}
...
Рейтинг: 0 / 0
Исключающее объединение коллекций, LINQ
    #36494276
Фотография МСУ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
1. Андрей, про Object.GetHashCode() что-нибудь слышали?
2. Зачем столько лишнего кода в Equals?

Код: plaintext
1.
2.
3.
4.
public override bool Equals(object obj)
{
    Item item = obj as Item;
    return obj as Item != null ? Title == item.Title && Desc == item.Title : false;
}
...
Рейтинг: 0 / 0
Исключающее объединение коллекций, LINQ
    #36494307
Фотография МСУ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
3. Андрей, зачем "поганить" класс, если для этого есть IEqualityComparer?
4. Ведь, в задачах в разрезе класса может быть ни один такой компаринг с Title и Published, может быть и другая логика по другим полям.
...
Рейтинг: 0 / 0
Исключающее объединение коллекций, LINQ
    #36495905
Фотография bured
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Это всё не принципиально.
...
Рейтинг: 0 / 0
Исключающее объединение коллекций, LINQ
    #36495917
Фотография МСУ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
МСУ1. Андрей, про Object.GetHashCode() что-нибудь слышали?

буредЭто всё не принципиально.

Букварь
Реализация метода Equals
1п. Для правильной работы типа в таблице хеширования следует переопределить метод GetHashCode.

Это тоже не принципиально? ;)
...
Рейтинг: 0 / 0
Исключающее объединение коллекций, LINQ
    #36495958
Фотография bured
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
МСУ,

я в курсе. 8-)
...
Рейтинг: 0 / 0
Исключающее объединение коллекций, LINQ
    #36496909
VitaliyBoris
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Всем спасибо.
...
Рейтинг: 0 / 0
10 сообщений из 10, страница 1 из 1
Форумы / ADO.NET, LINQ, Entity Framework, NHibernate, DAL, ORM [игнор отключен] [закрыт для гостей] / Исключающее объединение коллекций, LINQ
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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