Здравствуйте, Аноним, Вы писали:
А>Есть 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 сгруппированные коллекции
Re[4]: Linq. объединить 2 сгруппированные коллекции
От:
Аноним
Дата:
21.02.11 09:32
Оценка:
Здравствуйте, Mihas, Вы писали:
M>Здравствуйте, Аноним, Вы писали:
А>>да, неверно выразился. надо объеденить 2 коллекции oldCities и newCities по А>>условию OldCityID = NewCityID
M>Опять что-то не так. M>Если по условию OldCityID = NewCityID, то это сджойнить. А значит на выходе должен быть некий тип
M>
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 сгруппированные коллекции
Если я правильно понял условие "коллекция 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 — ведь объединяет, а мне нужно объединить с группировкой.
Я решение уже написал здесь