OK OK, sé que esto es un truco, pero esto fue para un pequeño proyecto de manipulación de datos y quería jugar. ;-)Optimizaciones del compilador de tipos anónimos
Siempre tuve la impresión de que el compilador examinaría todos los tipos anónimos utilizados en un programa C# y si las propiedades fueran las mismas, solo crearía una clase detrás de las escenas.
Así que digamos que quiero crear un tipo anónimo de algunos conjuntos de datos con tipo que tengo:
var smallData1 = new smallData1().GetData().Select(
x => new { Name = x.NAME, x.ADDRESS, City = x.CITY, State = x.STATE,
Zip = x.ZIP, Country = x.COUNTRY, ManagerName = x.MANAGER_NAME,
ManagerID = x.MANAGER_ID });
var smallData2 = new smallData2().GetData().Select(
x => new { x.Name, x.ADDRESS, x.City, x.State, x.Zip, x.Country,
x.ManagerName,x.ManagerID });
Ahora puede hacer cosas divertidas como smallData2.Except (smallData1); etc., y todo funciona.
Ahora, lo que si tengo una pareja más alta de los tipos anónimos:
var bigData1 = new BigAdapter1().GetData().Select(
x => new { x.FirstName, x.LastName, x.Address, x.City, x.State,
x.Zip, x.Country, x.Phone, x.Email, x.Website, x.Custom1, x.Custom2,
x.Custom3, x.Custom4, x.Custom5, x.Custom6, x.Custom7, x.Custom8, x.Custom9,
x.Custom10, x.Custom11, x.Custom12, x.Custom13, x.Custom14, x.Custom15,
x.Custom16, x.Custom17, x.Custom18, x.Custom19, x.Custom20, x.Custom21,
x.Custom22, x.Custom23, x.Custom24, x.Custom25, x.Custom26, x.Custom27,
x.Custom28, x.Custom29});
var bigData2 = new BigAdapter2().GetData().Select(
x => new { x.FirstName, x.LastName, x.Address, x.City, x.State, x.Zip,
x.Country, x.Phone, x.Email, x.Website, x.Custom1, x.Custom2, x.Custom3,
x.Custom4, x.Custom5, x.Custom6, x.Custom7, x.Custom8, x.Custom9, x.Custom10,
x.Custom11, x.Custom12, x.Custom13, x.Custom14, x.Custom15, x.Custom16,
x.Custom17, x.Custom18, x.Custom19, x.Custom20, x.Custom21, x.Custom22,
x.Custom23, x.Custom24, x.Custom25, x.Custom26, x.Custom27,
x.Custom28, x.Custom29});
Ahora cuando hago bigData2.Except (bigData1); el compilador se queja:
Instance argument: cannot convert from
'System.Data.EnumerableRowCollection<AnonymousType#1>' to
'System.Linq.IQueryable<AnonymousType#2>'
¿Por qué? ¿Demasiadas propiedades, por lo que el compilador decide que no vale la pena optimizar?
Gracias!
Sí, los adaptadores devuelven tipos de datos ligeramente diferentes, pero la diferencia es solo el tipo de conjunto de datos tipeados (provienen de diferentes bases de datos). Todas las propiedades son cadenas, por lo que pensé que usaría un tipo anónimo y eso me permitiría tratar los datos como UN tipo de tipo en lugar de dos. – Pandincus
OMG DONDE SURGIÓ ESE DOBLE. Err ... bien, estabas en lo cierto. Uno de los tipos es realmente diferente. Supongo que eso es lo que sucede cuando codifica a altas horas de la noche: -O – Pandincus