Cómo obtener ObjectResult desde Entity Framework usando una lista de identidades




 Tengo un HashSet de valores de identidad que necesito usar como valores de consulta para devolver un ObjectResult del Entity Framework 

 Aquí está el HashSet: 


```
HashSet<int> officeIds = new HashSet<int>();

```
  Aquí está la consulta que estoy tratando de ejecutar más o menos: 


```
ObjectResult<FilingOffice> offices = ctx.FilingOffice.Where(office => office IN officeIds.ToList());

```
  La parte "office => office IN officeIds.ToList ()" de lo que antecede es lo que no puedo trabajar y no he encontrado ninguna muestra en la web para recuperar objetos a partir de una lista de claves principales. 

 ctx es el System.Data.Objects.ObjectContext
Los ejemplos que otros han dado no funcionarán en Entity Framework hoy, porque no se pueden combinar enumeración de clientes y servidores en las entidades LINQ 2. 

 En su lugar, necesita construir una expresión OR, manualmente. 

 Ejecuto una serie de [consejos](http://blogs.msdn.com/alexj/archive/2009/03/26/index-of-tips.aspx) de [EF](http://blogs.msdn.com/alexj/archive/2009/03/26/index-of-tips.aspx) y [este consejo](http://blogs.msdn.com/alexj/archive/2009/03/26/tip-8-writing-where-in-style-queries-using-linq-to-entities.aspx) te muestra cómo construir una expresión OR. 

 Espero que esto ayude 

 Alex
*Nota: la respuesta se proporcionó en un comentario en la pregunta original. Solo le estoy agregando un poco aquí, para hacerlo más visible y claro.* 





 Entity Framework obviamente asigna clases de C # a tablas de bases de datos a través de propiedades que representan las distintas columnas en cada tabla. Ahora, si el tipo de datos de una de estas propiedades no es compatible con el tipo de datos de su columna correspondiente en la base de datos, obtendrá una `System.InvalidCastException` cuando intente recuperar algo de esa tabla, incluso si la propiedad no coincide no está directamente involucrada en la búsqueda 

 En la pregunta, la consulta fue: 


```
User user = context.Users.First(i => i.UserId == id);

```
  No importa que tanto `id` como su propiedad correspondiente `UserId` sean válidas y compatibles entre sí aquí, porque lo que se está buscando es una instancia de toda la clase de `User` . 

 Aparentemente, el tipo de alguna otra propiedad en el `User` es incompatible con el tipo una columna con el mismo nombre en la tabla de `user` en la base de datos, por lo que el intento de mapearlo arroja la excepción anterior. Se puede extraer información de archivos, utilizando un DTP (Data Transformation Package), en el Enterprise Manager, selecciona tu servidor, y después la opción: Data Transformation Services, sobre la opción Local Package, oprime el botón derecho y luego la opción New Package. Un DTP, se crea en forma gráfica, solo necesitas seleccionar el icono de archivo de texto fuente y el icono Microsoft Ole DB Provider for SQL Server. Posteriormente seleccionas oprimiendo la tecla Control, el icono de archivo de texto fuente y después sin soltarla el icono de Microsoft Ole DB provider for SQL Server. En la parte de arriba oprime la opción: Transform Data Task, aparecerá una flecha entre ambas conexiones. Le debes de dar doble click sobre esta flecha y especificar las opciones de Origen y destino. Así como que campos corresponden con las columnas del archivo de texto. Por ultimo para ejecutarlo oprime la flecha verde. **Descargo de responsabilidad** : soy el propietario del proyecto [Bulk Operations](http://bulk-operations.net/) 

 En resumen, este proyecto supera las limitaciones de SqlBulkCopy al agregar características IMPRESCINDIBLES como generar un valor de identidad insertado. 

 Debajo del capó, utiliza SqlBulkCopy y un método similar como @Mr Moose answer. 


```
var bulk = new BulkOperation(connection)

// Output Identity Value
bulk.ColumnMappings.Add("CustomerID", ColumnMappingDirectionType.Output);

// Map Column
bulk.ColumnMappings.Add("Code");
bulk.ColumnMappings.Add("Name");
bulk.ColumnMappings.Add("Email");

bulk.BulkInsert(dt);

```
  **EDITAR:** Responder comentario 


>  ¿puedo simplemente obtener una lista IL o simplemente veo que está guardada en la tabla de clientes, pero no hay ninguna variable donde pueda obtenerla? ¿Pueden ayudarme con eso? Entonces, inserto en la tabla Orders.CustomerID 
> 
> 

 Depende, puede mantener una referencia a la fila de datos del cliente denominada `CustomerRef` en la `DataTable` pedido. 

 Entonces, una vez que fusionó a su cliente, puede completar fácilmente una columna `CustomerID` de la columna `CustomerRef` en su Tabla de datos de pedido. 

 Aquí hay un ejemplo de lo que estoy tratando de decir: <https://dotnetfiddle.net/Hw5rf3> Básicamente hay varias cosas que puedes hacer. 

* usando `SqlBulkCopy.WriteToServer` que no funciona muy bien junto con EF, sin embargo, existen varios intentos para crear extensiones
* utilizando un procedimiento almacenado que tomará un registro grande y lo dividirá de acuerdo con alguna lógica
* utilizando parámetros de procedimiento almacenado escritos en la tabla y realice una llamada al procedimiento almacenado (y varias `insert ... select` dentro del procedimiento almacenado)

 En general, prefiero la tercera opción. 

 Marque esta pregunta [Entity Framework Stored Procedure Tabla Valor Parámetro](https://stackoverflow.com/questions/8157345/entity-framework-stored-procedure-table-value-parameter) ¿Por que no pruebas con DoCmd. TransferText?


```
Dim miRuta As String
Dim mensaje as string
mensaje = MsgBox("¿Desea bajar a su PC los archivos seleccionados? ", vbYesNo + vbQuestion, "Archivos de análisis")
If mensaje = vbYes Then
miRuta = InputBox("Escribe la ruta donde quieras exportar")
If StrPtr(miRuta)=0 Then Exit Sub
If V1 = -1 Then
DoCmd.TransferSpreadsheet acExport, 8, "Informe A", miRuta & "\" & "Informe A", True, ""
End If
...

```
Un saludo.





Un nuevo foro de access, visítanos: <http://nksvaccessolutions.com/Foro/> amigos les comparto la solución:

si alguien conoce que valores se le puede poner al campo i\_sgfunct por que con la “c” te muestra el paso a paso del proceso.

observen:

[[image]](https://foros.consultoria-sap.com/uploads/db7262/original/3x/c/5/c5599222f216c73cbaa60eba0c4ce2d109725223.png "image")
[[image]](https://foros.consultoria-sap.com/uploads/db7262/original/3x/f/0/f068ab9b0e27a375b953093037dd8a7bd1072a30.png "image")
[[image]](https://foros.consultoria-sap.com/uploads/db7262/original/3x/d/4/d448f934275234f3c7f8757fb1d4963123777dc9.png "image")

paso 1:

[[image]](https://foros.consultoria-sap.com/uploads/db7262/original/3x/9/b/9bcdcb9a236d604a71fd0e56bc2ca844d5fc8f4b.png "image")

paso 2:

[[image]](https://foros.consultoria-sap.com/uploads/db7262/original/3x/e/8/e859f68266fadd858aca3fef5ad15782fd65df02.png "image")

paso 3:

[[image]](https://foros.consultoria-sap.com/uploads/db7262/original/3x/c/f/cf4eaa2b483c117668b07c17e8e93c6d503ef805.png "image")

paso 4:

[[image]](https://foros.consultoria-sap.com/uploads/db7262/original/3x/0/f/0f52f083bd907828651e6fe3c760eb3e7c6fb977.png "image")

paso 5:

[[image]](https://foros.consultoria-sap.com/uploads/db7262/original/3x/0/7/07422411c986279788cc7ce415eb5e8f266280b3.png "image")

paso… lo pude solucionar en el dato maestro de las características que se asignan a los planes de inspección. desde el botón “indicador de control” hay que seleccionar “resultado individual”.

así, a la hora de capturar los resultados de la inspección, podrán registrar los resultados de varias muestras qu… Consulta: [Cómo conseguir el serial de Office 2016](https://es.ccm.net/faq/24558-como-conseguir-el-serial-de-office-2016) El reporte usa los datos de una tabla abierta para imprimir; la información que muestras en el grid también obtiene datos de una tabla, ya sea que sea un Select - SQL o una tala filtrada, por lo tanto puedes hacer el Reporte perfectamente con los datos del grid; solo tienes que hacer referencia a la misma tabla o cursor que tengas activo.

1. Seleccionas la tabla o cursor que tengas activo.

2. Usas Report Form <NombreDelReporte>

Ten presente que el Reporte si se refiere a los datos de la tabla (por ej. así: Tabla. Campo) y tu Cursor o Tabla (del grid) tiene un nombre diferente te dará error. rodolfo aqu&iacute; ubicas lo que necesitas:<br/><a href='https://www.google.com.co/search?q=stk433-320+datasheet&amp;tbm=isch&amp;tbo=u&amp;source=univ&amp;sa=x&amp;ved=0ahukewji9b7w4phvahupziykhvh1c0uqsaqilw&amp;biw=1600&amp;bih=794#imgrc=hjmz4gkpm8petm:' rel='nofollow' target='\_blank'>https://www.google.com.co/search?q=stk433-320+datasheet&amp;tbm=isch&amp;tbo=u&amp;source=univ&amp;sa=x&amp;ved=0ahukewji9b7w4phvahupziykhvh1c0uqsaqilw&amp;biw=1600&amp;bih=794#imgrc=hjmz4gkpm8petm:</a>