Trabajando con Linq me encontré el siguiente error al intentar hacer una consulta sobre dos colecciones utilizando la instrucción "Join":
The type of one of the expressions in the join clause is incorrect. Type inference failed in the call to 'Join'.
La instrucción que genera el error:
DbCommand Comando = obFactory.CreateCommand(); … foreach (var mapaEntity in from mapa in obEntityHelper join param in Comando.Parameters on mapa.Parametro equals param.ParameterName where !String.IsNullOrEmpty(mapa.Parametro) select mapa) |
Básicamente el problema se debe a que la colección "Parameters" de la clase "DbCommand" no implementa una interfaz genérica, en otras palabras es una "non-generic list", razón por lo cual no puede identificar el tipo correcto de cada uno de los elementos de la colección. Este problema se presenta en cualquier lista de elementos no específicos de tipo "Object".
La solución consiste en utilizar el método extendido "Cast< TResult >" para convertir los elementos de la lista a un tipo específico:
DbCommand Comando = obFactory.CreateCommand(); … foreach (var mapaEntity in from mapa in obEntityHelper join param in Comando.Parameters.Cast<DbParameter>() on mapa.Parametro equals param.ParameterName where !String.IsNullOrEmpty(mapa.Parametro) select mapa) |
De tal forma que dentro de la instrucción de consulta, el compilador pueda utilizar la clase específica para poder refernciar sus propiedades y atributos, además los elementos de la colección resultante serán de un tipo de datos específico.
| Ambiente |
| Sistema Operativo |
Windows Vista Ultimate + Sp1 |
| Microsoft .NET Framework |
3.5 |
| Microsoft Visual Studio |
2008 Version 9.0.21022.8 RTM |
Este semestre inicie a trabajar como arquitecto en nuevo proyecto de software y como herramientas de PMI instalé un portal de SharePoint y el Microsoft Project Server® 2007. Inicialmente todo funcionaba de maravilla hasta que inicia a programar el Timesheet por recurso, en ese momento el portal web me arrojó el siguiente error "DataSource property must be set to DataSet, DataTable or XmlGridBinding". Al buscar en la causa de este error me encontré con él artículo 953435 en el sitio web de Microsoft Help and Support, el cual en resumen dice que cierta funcionalidad del Microsoft Project Server 2007 se ve afectada si el nombre del computador sobre el cual se instala Proyect contiene un carácter underscore (_).
Desafortunadamente en la primera versión de este artículo no se encontraba la opción de crear un alias en el DNS, sino que simplemente se renombrara la máquina quitando el carácter de underscore. Sin embargo, esta recomendación no consideraba el escenario de un "Single installation server" donde en la misma máquina se encuentran instalados todos los servicios:
- 1. Microsoft SQL Server, incluyendo los servicios de Reports y Analisys
- 2. SaherePoint Server
- 3. Microsoft Proyect Server 2007
Cometí la imprudencia de renombrar el computador, creando un verdadero caos en todos los servicios. Por eso y por el hecho de perder una semana restaurando el perfecto funcionamiento del servidor, quiero anotarles ciertos concejos:
- NUNCA, pero nunca utilicen caracteres especiales en los nombres de los computadores. Es preferible utilizar algún tipo de notación camel o subniveles en la organización de su dominio de red.
- Antes de hacer algún cambio asegúrese que tiene un backup de Project Server a través del "SharePoint Central Administration Web site". En un post del portal de Project encontré este artículo con las directrices completas: "Backup and Restore Project Server 2007"
- Al renombrar la computadora debe volver a registrar la instancia por defecto de Microsoft SQL Server: "How to: Rename a Computer that Hosts a Stand-Alone Instance of SQL Server 2005" y adicionalmente poner atención en el servicio de reportería "Renaming a Report Server Computer"
- Es muy importante saber que existe una magnifica herramienta de línea de comando llamada "STSADM" la cual permite hacer cualquier configuración o cambio sobre Windows SharePoint Services, y lo más importante arreglar cualquier daño que haganL.
- Sigan la guía (al pie de la letra) "Rename a stand-alone server (Office SharePoint Server)", evitando el mínimo de daño colateral.
- Finalmente, estén muy atentos a su EventLog, para detectar y solucionar problemas colaterales que puedan ocurrir tras esta operación.
Espero que estos consejos eviten que tengan que pasar por este doloroso proceso y que le sean de utilidad.
| Ambiente |
| Sistema Operativo |
Windows Server 2003 R2 |
| Base de Datos |
Microsoft SQL Server 2005 + sp2 |
| Windows SharePoint Services |
3.0 |
| Producto |
Office Project Server 2007 |