Здравствуйте, Аноним, Вы писали:
А>но стоит заменить выделенную g на g1 во втором селекте и начинает выкидывать ошибку
А>что такое? ведь второй селект не видит первый
Потому что результатами Select'ов становятся разные типы, которые не могут быть объеденены Union'ом.
Когда вы делаете так:
new {
unionCityID = g.oldCityID,
g
}
..Вы создаёте анонимный тип с полем 'unionCityID' типа int и полем 'g' типа City.
Обратите внимание на имена полей — их можно либо указать явно, либо они возьмутся из выражения, если это возможно.
Заменив
g на
g1, Вы просто создадите
другой анонимный тип с вторым полем 'g1', который не будет иметь ничего общего с анонимным типом, возвращаемым первым Select'ом.
Делаю обычную группировку типовно странная какая-то вещь происходит
так всё работает
class Program
{
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,
dt = DateTime.Now
};
var cities = new List<City> { c1, c2, c3, c4 };
var arr1 = cities.Where(i => i.newCityID != 0).GroupBy(i1 => i1.newCityID.GetValueOrDefault()).ToList();
var arr2 = cities.Where(j => j.newCityID == 0).GroupBy(j1 => j1.oldCityID).ToList();
var nc = cities.Where(i => i.newCityID != 0).Select(g => new
{
unionCityID = g.newCityID.GetValueOrDefault(),
g
})
.Union(cities.Where(i => i.newCityID == 0).Select(g => new
{
unionCityID = g.oldCityID,
g
}))
.GroupBy(r => r.unionCityID).ToList();
}
}
но стоит заменить выделенную g на g1 во втором селекте и начинает выкидывать ошибку
что такое? ведь второй селект не видит первый
Здравствуйте, Пельмешко, Вы писали:
П>Здравствуйте, Аноним, Вы писали:
А>>но стоит заменить выделенную g на g1 во втором селекте и начинает выкидывать ошибку
А>>что такое? ведь второй селект не видит первый
П>Потому что результатами Select'ов становятся разные типы, которые не могут быть объеденены Union'ом.
П>Когда вы делаете так:
П>П>new {
П> unionCityID = g.oldCityID,
П> g
П>}
П>
П>..Вы создаёте анонимный тип с полем 'unionCityID' типа int и полем 'g' типа City.
П>Обратите внимание на имена полей — их можно либо указать явно, либо они возьмутся из выражения, если это возможно.
П>Заменив g на g1, Вы просто создадите другой анонимный тип с вторым полем 'g1', который не будет иметь ничего общего с анонимным типом, возвращаемым первым Select'ом.
действительно, если указать
new { myCity = g ...} то всё работает
Спасибо!