¿Por qué no obtengo .CopyToDataTable () en Linq Query ()

Este ejemplo de código siguiente está tomado de MSDN aquí . No obtengo query.CopyToDataTable () disponible en mi código. (Ver la línea comentada en mi siguiente código).

public static bool SetPhysicianAsNotonServer(DataTable dt) { DataTable dtPhysicianServer = dt; DataTable dtPhysicianClient = GetPhysicianClient(); var query = from SPhysician in dtPhysicianServer.AsEnumerable() join CPhysician in dtPhysicianClient.AsEnumerable() on SPhysician.Field("PhysicianNumber") equals CPhysician.Field("PhysicianNumber") select new { PhysicianNumber = CPhysician.Field("PhysicianNumber") }; DataTable FilterDt = query; //query.CopyToDataTable(); //YET TO DO CODE HERE return true; } 

Su statement de selección está devolviendo una secuencia de cadenas ( IEnumerable o IQueryable ), no una secuencia de DataRows. CopyToDataTable () solo está disponible en IEnumerable donde T es o deriva de DataRow.

En lugar de select new { ... } , que te dará una nueva secuencia de ese tipo, prueba:

 select CPhysician; 

Lo que debería devolver la secuencia deseada de las filas de CPhysician.

Editar Si desea convertir una T derivada no datable a una datable, MSDN tiene una clase de muestra que refleja cualquier tipo y realiza la conversión.

http://msdn.microsoft.com/en-us/library/bb669096.aspx

Existe en un espacio de nombres específico, ¿lo estás importando?

 System.Data.DataTableExtensions.CopyToDataTable() 

Confirme también la adición de esta referencia.

 System.Data.DataSetExtensions 

Creo que es porque estás creando un tipo anónimo para mantener el objeto Field . Prueba esto:

  var query = from SPhysician in dtPhysicianServer.AsEnumerable() join CPhysician in dtPhysicianClient.AsEnumerable() on SPhysician.Field("PhysicianNumber") equals CPhysician.Field("PhysicianNumber") select CPhysician; DataTable FilterDt = query.CopyToDataTable(); 

Definición de CopyToDataTable :

 public static DataTable CopyToDataTable( this IEnumerable source ) where T : DataRow 

Entonces, lo que seleccione con la consulta debe ser del tipo IEnumerable donde T extiende DataRow

Debe hacer referencia al ensamblado System.Data.DataSetExtensions y usar el espacio de nombres System.Data .

¿Has hecho referencia al ensamblado System.Data.DataSetExtensions? Este método de extensión se define allí.

Navegar más en MSDN en línea me lleva a esta página: http://msdn.microsoft.com/en-us/library/system.data.datatableextensions.aspx

Dice que está en el espacio de nombres System.Data (usando System.Data) y necesita hacer referencia a System.Data.DataSetExtensions.dll.