powered by simpleCommunicator - 2.0.51     © 2025 Programmizd 02
Форумы / ADO.NET, LINQ, Entity Framework, NHibernate, DAL, ORM [игнор отключен] [закрыт для гостей] / linq запрос на вхождение
5 сообщений из 5, страница 1 из 1
linq запрос на вхождение
    #37460946
newbie3732
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Код: plaintext
1.
2.
3.
List<int> a = new List<int>(new int[] { 1, 3, 5 });
List<int> b = new List<int>(new int[] { 2, 3, 4 });
List<int> c = a.Where(f => !b.Contains(f)).ToList();
Работает. А как это для:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
class A
{
     public int FA { get; set; }
}

List<A> A1 = new List<A>(new A[] { new A { FA = 1 }, new A { FA = 3 }, new A { FA = 5 } });
List<A> A2 = new List<A>(new A[] { new A { FA = 2 }, new A { FA = 3 }, new A { FA = 4 } });
List<A> A1A2 = A1.Where(f1 => !(from f2 in A2 select f2.FA).Contains(f1.FA)).ToList(); // возвращает все три элемента A1
...
Рейтинг: 0 / 0
linq запрос на вхождение
    #37461256
newbie3732
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Когда добавил
Код: plaintext
1.
2.
3.
4.
5.
6.
class A
{
     public static bool operator ==(A left, A right)
     public static bool operator !=(A left, A right)
     public override bool Equals(object obj)
}
обе конструкции заработали. Но хотелось бы научиться делать это только на linq.
...
Рейтинг: 0 / 0
linq запрос на вхождение
    #37461278
newbie3732
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Очень извиняюсь :( конструкция
Код: plaintext
1.
2.
3.
List<A> A1 = new List<A>(new A[] { new A { FA = 1 }, new A { FA = 3 }, new A { FA = 5 } });
List<A> A2 = new List<A>(new A[] { new A { FA = 2 }, new A { FA = 3 }, new A { FA = 4 } });
List<A> A1A2 = A1.Where(f1 => !(from f2 in A2 select f2.FA).Contains(f1.FA)).ToList();
работает
...
Рейтинг: 0 / 0
linq запрос на вхождение
    #37461793
stimpi
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
курим Except/Intersect
...
Рейтинг: 0 / 0
linq запрос на вхождение
    #37461824
stimpi
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
создаем хелпер класс

Код: 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.
public class GenericEqualityComparer<T> : IEqualityComparer<T>
    {
        private readonly Func<T, T, bool> _compareFunc;
        private readonly Func<T, int> _hashFunc;

        public GenericEqualityComparer(Func<T, T, bool> compareFunc)
        {
            _compareFunc = compareFunc;
        }

        public GenericEqualityComparer(Func<T, T, bool> compareFunc, Func<T, int> hashFunc)
            : this(compareFunc)
        {
            _compareFunc = compareFunc;
            _hashFunc = hashFunc;
        }
    
        public bool Equals(T x, T y)
        {
            return _compareFunc(x, y);
        }

        public int GetHashCode(T obj)
        {
            return _hashFunc != null ? _hashFunc(obj) : obj.GetHashCode();
        }
    }

ну и юзаем его вовсю

Код: plaintext
1.
2.
3.
List<A> A1 = new List<A>(new A[] { new A { FA = 1 }, new A { FA = 3 }, new A { FA = 5 } });
            List<A> A2 = new List<A>(new A[] { new A { FA = 2 }, new A { FA = 3 }, new A { FA = 4 } });

            var cc = A1.Except(A2, new GenericEqualityComparer<A>((x, y) => x.FA == y.FA, (x) => x.FA.GetHashCode())).ToList();
...
Рейтинг: 0 / 0
5 сообщений из 5, страница 1 из 1
Форумы / ADO.NET, LINQ, Entity Framework, NHibernate, DAL, ORM [игнор отключен] [закрыт для гостей] / linq запрос на вхождение
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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