powered by simpleCommunicator - 2.0.49     © 2025 Programmizd 02
Форумы / ADO.NET, LINQ, Entity Framework, NHibernate, DAL, ORM [игнор отключен] [закрыт для гостей] / Соединить два множества без join
17 сообщений из 17, страница 1 из 1
Соединить два множества без join
    #39492169
vb_sub
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Привет, к сожалению не могу понять как решить довольно простую задачу.
Есть 2 List с разным количеством элементов. Нужно просто сбоку к первому набору данных присоединить второй.

Первый List
Код: plaintext
1.
2.
3.
4.
a	b	c
f1	f2	f3
f4	f5	f6
f7	f8	f9

Второй List
Код: plaintext
1.
2.
3.
d	e
s1	s2
s3	s4

Нужно получить
Код: plaintext
1.
2.
3.
4.
a	b	c	d	e
f1	f2	f3	s1	s2
f4	f5	f6	s3	s4
f7	f8	f9		
. Сейчас костылю это следующим образом=>
1) Нумерую записи обоих множеств (инкремент)
2) Join по порядковому номеру
3)Добавляю записи, которые не попали при join.
Как можно избежать костыля? Спасибо.
...
Рейтинг: 0 / 0
Соединить два множества без join
    #39492202
Агнец за бортом
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
vb_sub,

List - это список.

Что такое a,b,c ?
...
Рейтинг: 0 / 0
Соединить два множества без join
    #39492208
Агнец за бортом
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Агнец за бортомvb_sub,

List - это список.

Что такое a,b,c ?


Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace ConsoleApp2
{
    class Program
    {
        static void Main(string[] args)
        {
            var l1 = new List<String>() { "f1", "f2", "f3", "f4", "f5", "f6", };
            var l2 = new List<String>() { "e1", "e2", "e3"};

            var l3 = l1.Union(l2);
        }
    }
}
...
Рейтинг: 0 / 0
Соединить два множества без join
    #39492221
vb_sub
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Агнец за бортом,
abc, f1,f2,f3- это свойства экземпляра класса- одна строка - один экземпляр класса.

d,e - свойства экземпляра другого класса.
Проблема в том, что union наращивает строки "снизу", а чтобы просто приклеить "сбоку" другой набор данных нужно join делать, а он без ключа не работает.
...
Рейтинг: 0 / 0
Соединить два множества без join
    #39492232
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Zip?
...
Рейтинг: 0 / 0
Соединить два множества без join
    #39492238
vb_sub
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Shocker.Pro,

zip не помогает, потому что он урезает количество записей результативного набора до минимального из двух множеств.
...
Рейтинг: 0 / 0
Соединить два множества без join
    #39492240
Агнец за бортом
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
vb_subАгнец за бортом,
abc, f1,f2,f3- это свойства экземпляра класса- одна строка - один экземпляр класса.

d,e - свойства экземпляра другого класса.
Проблема в том, что union наращивает строки "снизу", а чтобы просто приклеить "сбоку" другой набор данных нужно join делать, а он без ключа не работает.

Мутное там что то у тебя. Покажи код.
...
Рейтинг: 0 / 0
Соединить два множества без join
    #39492241
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
vb_subShocker.Pro,

zip не помогает, потому что он урезает количество записей результативного набора до минимального из двух множеств.Ну и что? Берешь Enumerable.Range(Max(count1,count2)) за основу и Zip-ишь обе последовательности к нему
...
Рейтинг: 0 / 0
Соединить два множества без join
    #39492242
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Shocker.Provb_subShocker.Pro,

zip не помогает, потому что он урезает количество записей результативного набора до минимального из двух множеств.Ну и что? Берешь Enumerable.Range(Max(count1,count2)) за основу и Zip-ишь обе последовательности к немуне, это я глупость сказал
...
Рейтинг: 0 / 0
Соединить два множества без join
    #39492244
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Shocker.ProShocker.Proпропущено...
Ну и что? Берешь Enumerable.Range(Max(count1,count2)) за основу и Zip-ишь обе последовательности к немуне, это я глупость сказалМожно Union-ом дополнить короткую последовательность с помощью Enumerable.Range(count2 - count1), а потом Zip-ить
...
Рейтинг: 0 / 0
Соединить два множества без join
    #39492291
vb_sub
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Агнец за бортом,

Код: c#
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.
48.
49.
50.
51.
52.
  /// <summary>
    /// Классы
    /// </summary>
    class cls1
    {
        public string prop_of_cls1_1 { get; set; }
        public string prop_of_cls1_2 { get; set; }
        public string prop_of_cls1_3 { get; set; }
        public string prop_of_cls1_4 { get; set; }

    }

    class cls2
    {
        public string prop_of_cls2_1 { get; set; }
        public string prop_of_cls2_2 { get; set; }
        public string prop_of_cls2_3 { get; set; }
    }



                // инициализация списков экзепляров 
                List<cls1> list_of_cls1 = new List<cls1>(2);
                List<cls2> list_of_cls2 = new List<cls2>(1);

                //заполняем списки экземплярами классов- все равно какими значениями

                list_of_cls1.Add(new Print_Acts.cls1
                {
                    prop_of_cls1_1 = "1",
                    prop_of_cls1_2 = "2",
                    prop_of_cls1_3 = "3",
                    prop_of_cls1_4 = "4"
                });


                list_of_cls1.Add(new Print_Acts.cls1
                {
                    prop_of_cls1_1 = "5",
                    prop_of_cls1_2 = "6",
                    prop_of_cls1_3 = "7",
                    prop_of_cls1_4 = "8"
                });


                list_of_cls2.Add(new Print_Acts.cls2
                {
                    prop_of_cls2_1 = "11",
                    prop_of_cls2_2 = "22",
                    prop_of_cls2_3 = "33"
                });
          



// на выходе нужно Ienumerable со следующими параметрами (см. PDF)
...
Рейтинг: 0 / 0
Соединить два множества без join
    #39492300
vb_sub
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Shocker.Pro,

ок буду пробовать.
...
Рейтинг: 0 / 0
Соединить два множества без join
    #39492386
Агнец за бортом
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
vb_sub
// на выходе нужно Ienumerable со следующими параметрами (см. PDF)

Дай на выходе - что ты сейчас получаешь кодом с JOIN-ом
...
Рейтинг: 0 / 0
Соединить два множества без join
    #39492483
vb_sub
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Агнец за бортом,

сейчас делаю так
Код: c#
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.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
class cls1
    {   public string order_id { get; set; } //фиктивный столбец для связывания
        public string prop_of_cls1_1 { get; set; }
        public string prop_of_cls1_2 { get; set; }
        public string prop_of_cls1_3 { get; set; }
        public string prop_of_cls1_4 { get; set; }

    }

    class cls2
    {   public string order_id { get; set; }//фиктивный столбец для связывания
        public string prop_of_cls2_1 { get; set; }
        public string prop_of_cls2_2 { get; set; }
        public string prop_of_cls2_3 { get; set; }
    }

	
	
    class common_result_model
	{
		public string order_id { get; set; } 
        public string prop_of_cls1_1 { get; set; }
        public string prop_of_cls1_2 { get; set; }
        public string prop_of_cls1_3 { get; set; }
        public string prop_of_cls1_4 { get; set; }
		
		
		public string order_id { get; set; }
        public string prop_of_cls2_1 { get; set; }
        public string prop_of_cls2_2 { get; set; }
        public string prop_of_cls2_3 { get; set; }
		
	}        


		          ushort i = 0;
                    foreach (cls1 item in list_of_cls1 )
                    {
                        item.order_id = i++;
                    }


                    i = 0;
                    foreach (cls2 item in list_of_cls2)
                    {
                        item.order_id = i++;
                    }
					
			
                                     var result = from p in list_of_cls1
                                     join v in list_of_cls2 on p.order_id equals v.order_id 
                                     select new common_result_model()
                                     {
                                       prop_of_cls1_1 = p.prop_of_cls1_1 ,
                                       prop_of_cls1_2=p.prop_of_cls1_2,
                                       prop_of_cls1_3=p.prop_of_cls1_3,
                                       prop_of_cls1_4 =p.prop_of_cls1_4,


                                       prop_of_cls2_1 =v.prop_of_cls2_1,
                                       prop_of_cls2_2=v.prop_of_cls2_2,
                                       prop_of_cls2_3 =v.prop_of_cls2_3,
                                      };



И сейчас получаю на выходе такой-же результат, как на приведенной выше картинке, только без 3 строки- то есть join обрезает количество записей. "Обрезанную" недостающую часть записей буду притягивать через except с последующим union c var result. Пока не реализовал, но здесь нечему ломаться, чтобы что-то не получилось.
...
Рейтинг: 0 / 0
Соединить два множества без join
    #39492585
Агнец за бортом
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Откуда вообще такие задачи рождаются??
...
Рейтинг: 0 / 0
Соединить два множества без join
    #39492586
Агнец за бортом
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: c#
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.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace ConsoleApp2
{
    class Program
    {
        static void Main(string[] args)
        {
            var fList = new List<first>();
            var sList = new List<second>();


          var result =  fList.Select(x => new model()
            {
                first_prop = x.first_prop,
                second_prop = x.second_prop,
                third_prop = x.third_prop
            }).ToList();

            sList.Select((item, index) =>
            {
                result[index].fourth_prop = item.first_prop;
                result[index].fifth_prop = item.second_prop;
                return true;
            }).ToList();



        }
    }

    class first
    {
       public String first_prop;
        public String second_prop;
        public String third_prop;
    }

    class second
    {
        public String first_prop;
        public String second_prop;        
    }

    class model
    {
        public String first_prop;
        public String second_prop;
        public String third_prop;
        public String fourth_prop;
        public String fifth_prop;

    }

}
...
Рейтинг: 0 / 0
Соединить два множества без join
    #39492772
vb_sub
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Агнец за бортом,

Агнец за бортомОткуда вообще такие задачи рождаются?? Из наркоманской постановки задачи. Спасибо за участие.
...
Рейтинг: 0 / 0
17 сообщений из 17, страница 1 из 1
Форумы / ADO.NET, LINQ, Entity Framework, NHibernate, DAL, ORM [игнор отключен] [закрыт для гостей] / Соединить два множества без join
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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