| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > LINQ (Language-Integrated Query) > Linq запрос к двум List<T> |
| Автор: TheRam 6.2.2014, 16:15 |
| Здравствуйте форумчане. Вот начал изучать linq и придумал себе задачу, для практики и в ней же застрял: Есть класс Product с полями ID и Money Есть два List<Product> list1, list2 Как с помощью linq to object получить набор данных вида ID,list1.Money, list2.Money из list1 и list2 у которых ID равны, но различаются по полю Money и list1.ID нет в list2 (list2.Money в данном случае установить в 0)? Первую часть с одинаковыми ID, но разными суммами я сделал, а вот как сделать выборку данных, которых нет в list2 с той же проекцией, как и в первой части, что бы их объединить - не получается. |
| Автор: Certain 6.2.2014, 18:27 | ||
Если я правильно понял Вас
|
| Автор: TheRam 7.2.2014, 08:45 |
| Спасибо большое, думал не в том направлении, шел по пути объединения трех под запросов. Но есть еще один вопрос: в оригинале у меня вместо int ID у меня long ID и после выполнения запроса, у меня выводится правильные результаты (9 шт) и еще 128 каких-то данных, с ID = -2147483648 у всех 128 элементов. Вопрос: что это такое и почему их получается 128, когда элементов для сравнения в каждом list > 10 000? |
| Автор: Certain 7.2.2014, 09:17 |
| Думаю Вам лучше сюда исходник скинуть... Проблема может быть 1. В самом списке. 2. В классе Product. 3. В коде, который находится после инициализации списков и до вызова linq запроса. ID = -2147483648... диапазон типа System.Int32 от -2147483648 до 2147483647 |
| Автор: TheRam 7.2.2014, 11:14 |
| Спасибо большое, напоминание диапазона int32 навело на мысль о потери данных при преобразовании типов, что и было. Сначала поле ID у меня было int, а после обноружил, что нужен long, в результате в одном месте получилось преобразование из long в int, а потом обратно в long А можно еще вопросик: а при использовании list1.Except(list2) можно задать похожую проекцию, как в случае первого варианта? |
| Автор: Certain 7.2.2014, 12:19 | ||||
Да, можно, но придётся писать компаратор:
и сам запрос:
|
| Автор: TheRam 7.2.2014, 13:23 |
| Спасибо большое! |