Linq. объединить 2 сгруппированные коллекции
От: Аноним  
Дата: 21.02.11 08:37
Оценка:
Есть 2 коллекции одного типа.

var oldCities = List<City>....GroupBy(c => c.OldCityID);
var newCities = List<City>...GroupBy(c => c.NewCityID);

как сджойнить 2 коллекции по OldCityID = NewCityID ?
Re: Linq. объединить 2 сгруппированные коллекции
От: QrystaL Украина  
Дата: 21.02.11 08:53
Оценка:
Здравствуйте, Аноним, Вы писали:

А>Есть 2 коллекции одного типа.


А>var oldCities = List<City>....GroupBy(c => c.OldCityID);

А>var newCities = List<City>...GroupBy(c => c.NewCityID);

А>как сджойнить 2 коллекции по OldCityID = NewCityID ?


Что значит "сджойнить" ? Какой тип данных на выходе?
Re[2]: Linq. объединить 2 сгруппированные коллекции
От: Аноним  
Дата: 21.02.11 08:58
Оценка:
Здравствуйте, QrystaL, Вы писали:

QL>Здравствуйте, Аноним, Вы писали:


А>>Есть 2 коллекции одного типа.


А>>var oldCities = List<City>....GroupBy(c => c.OldCityID);

А>>var newCities = List<City>...GroupBy(c => c.NewCityID);

А>>как сджойнить 2 коллекции по OldCityID = NewCityID ?


QL>Что значит "сджойнить" ? Какой тип данных на выходе?


да, неверно выразился. надо объеденить 2 коллекции oldCities и newCities по
условию OldCityID = NewCityID
Re[3]: Linq. объединить 2 сгруппированные коллекции
От: QrystaL Украина  
Дата: 21.02.11 09:08
Оценка:
А>да, неверно выразился. надо объеденить 2 коллекции oldCities и newCities по
А>условию OldCityID = NewCityID

Zip?
Re[3]: Linq. объединить 2 сгруппированные коллекции
От: Mihas  
Дата: 21.02.11 09:12
Оценка:
Здравствуйте, Аноним, Вы писали:

А>да, неверно выразился. надо объеденить 2 коллекции oldCities и newCities по

А>условию OldCityID = NewCityID

Опять что-то не так.
Если по условию OldCityID = NewCityID, то это сджойнить. А значит на выходе должен быть некий тип

class JoinCity
{
  uint OldCityID;
  uint NewCityID;
  string OldCityName;
  string NewCityName;
}
Re[4]: Linq. объединить 2 сгруппированные коллекции
От: Аноним  
Дата: 21.02.11 09:32
Оценка:
Здравствуйте, Mihas, Вы писали:

M>Здравствуйте, Аноним, Вы писали:


А>>да, неверно выразился. надо объеденить 2 коллекции oldCities и newCities по

А>>условию OldCityID = NewCityID

M>Опять что-то не так.

M>Если по условию OldCityID = NewCityID, то это сджойнить. А значит на выходе должен быть некий тип

M>
M>class JoinCity
M>{
M>  uint OldCityID;
M>  uint NewCityID;
M>  string OldCityName;
M>  string NewCityName;
M>}
M>


Here: http://msdn.microsoft.com/en-us/library/bb534675.aspx
и, кстати, я не думаю что Вам нуен будет какой-то другой тип, достаточно того же City
Re[4]: Linq. объединить 2 сгруппированные коллекции
От: Аноним  
Дата: 21.02.11 11:22
Оценка:
Здравствуйте, QrystaL, Вы писали:

А>>да, неверно выразился. надо объеденить 2 коллекции oldCities и newCities по

А>>условию OldCityID = NewCityID

QL>Zip?


Zip не подходит.

вот такой код

   class City
        {
            public int newCityID;
            public int oldCityID;
        }
        

        static void Main(string[] args)
        {
            City c1 = new City
                          {
                              newCityID = 1,
                              oldCityID = 1
                          };

            City c2 = new City
            {
                newCityID = 0,
                oldCityID = 2
            };

            City c3 = new City
            {
                newCityID = 0,
                oldCityID = 1
            };

            City c4 = new City
            {
                newCityID = 4,
                oldCityID = 4
            };
        

            var cities = new List<City> {c1, c2, c3, c4};

            var nc = cities.Where(g => g.newCityID != 0).GroupBy(c => c.newCityID).ToList();
            var oc = cities.Where(g => g.newCityID == 0).GroupBy(c => c.oldCityID).ToList();

            var r = nc.Zip(oc, (nt, et) => ????).ToList();
        }


первоначально группировка по условиям :
коллекция 1. (newCityID где newCityID != 0)
коллекция 2. (oldCityID где newCityID == 0!= 0)

на выходе надо получить коллекцию "коллекция nc + города из oc у которых newCityID == oldCityID"
Re[5]: Linq. объединить 2 сгруппированные коллекции
От: Mihas  
Дата: 21.02.11 11:24
Оценка:
Здравствуйте, Аноним, Вы писали:

А>Here: http://msdn.microsoft.com/en-us/library/bb534675.aspx

А>и, кстати, я не думаю что Вам нуен будет какой-то другой тип, достаточно того же City

Оказывается, это мне нужно джойнить две последовательности

Честно говоря, я не понял цель, которую требуется достигнуть.
Re[6]: Linq. объединить 2 сгруппированные коллекции
От: Mihas  
Дата: 21.02.11 11:29
Оценка:
Здравствуйте, Mihas, Вы писали:

M>Честно говоря, я не понял цель, которую требуется достигнуть.

Нашел
Re[5]: Linq. объединить 2 сгруппированные коллекции
От: Mihas  
Дата: 21.02.11 11:42
Оценка:
Здравствуйте, Аноним, Вы писали:

Если я правильно понял условие "коллекция nc + города из oc у которых newCityID == oldCityID"
То:

           var nc = cities.Where(g => g.newCityID != 0).GroupBy(c => c.newCityID).ToList();
           var nid = nc.Select(g => g.newCityID).ToList();
           var oc = cities.Where(g => g.newCityID == 0).GroupBy(c => c.oldCityID).ToList();

           var r = nc.Concat(oc.Where(g => nid.Contains(g.oldCityID))).ToList();


Не? Не так?
Re[4]: Linq. объединить 2 сгруппированные коллекции
От: Аноним  
Дата: 21.02.11 14:03
Оценка:
Здравствуйте, QrystaL, Вы писали:

А>>да, неверно выразился. надо объеденить 2 коллекции oldCities и newCities по

А>>условию OldCityID = NewCityID

QL>Zip?


так сделал


 var cities = new List<City> {c1, c2, c3, c4, c5, c6, c7, c8};
            var nc = cities.Where(i => i.newCityID != 0).Select(g => new
                                                                         {
                                                                             unionCityID = g.newCityID,
                                                                             g
                                                                         })
                .Union(cities.Where(i => i.newCityID == 0).Select(g => new
                                                                           {
                                                                               unionCityID = g.oldCityID,
                                                                               g
                                                                           }))
                .GroupBy(r => r.unionCityID).ToList();
Re[6]: Linq. объединить 2 сгруппированные коллекции
От: Аноним  
Дата: 21.02.11 17:57
Оценка:
Здравствуйте, Mihas, Вы писали:

M>Здравствуйте, Аноним, Вы писали:


M>Если я правильно понял условие "коллекция nc + города из oc у которых newCityID == oldCityID"

M>То:

M>
M>           var nc = cities.Where(g => g.newCityID != 0).GroupBy(c => c.newCityID).ToList();
M>           var nid = nc.Select(g => g.newCityID).ToList();
M>           var oc = cities.Where(g => g.newCityID == 0).GroupBy(c => c.oldCityID).ToList();

M>           var r = nc.Concat(oc.Where(g => nid.Contains(g.oldCityID))).ToList();
M>


M>Не? Не так?


Concat — ведь объединяет, а мне нужно объединить с группировкой.
Я решение уже написал здесь
Автор:
Дата: 21.02.11
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.