2010-10-15 12 views
6

Tengo una aplicación en la que estoy usando un procedimiento almacenado y LINQ. Mi procedimiento es el siguiente:Recuperar n vincular datos de StoredProcedure con Join, LINQ y luego Split. utilizando resultados múltiples, Linq2SQL

myProc 

select col1, Col2, Col3 from Tab1 inner join Tab2 on col1=ColA join tab3 on Col1=ColD 

Select cola, Colb, Colc from Taba inner join Tabb on cola=ColX join tabc on Cola=ColY 

Select colP, ColQ, ColR from TabP inner join TabQ on colP=ColW join tabR on ColP=ColZ 

Estoy ejecutando este procedimiento almacenado en LINQ. Cuando lo ejecuto obtengo los resultados en IMultipleResults.

A continuación se muestra el código de LINQ:

[Function(Name = "dbo.MyProc")] 
[ResultType(typeof(TabA))] 
[ResultType(typeof(TabB))] ..... 
public IMultipleResults GetMultipleResults([Parameter(DbType = "VarChar(50)")] string i_Cola) 
{ 
    IExecuteResult result = this.ExecuteMethodCall(this, ((MethodInfo)(MethodInfo.GetCurrentMethod())), i_Cola); 
    return (IMultipleResults)result.ReturnValue; 
} 

Cuando ejecuto la siguiente manera:

MyContext mCtx = new MyContext() 
var allResult = mCtx.GetMultipleResults(txtName.Text.Trim()); 
IEnumerable<Taba> TabaRes = allResult.GetResult<Taba>(); 
IEnumerable<TabB> TabbRes = allResult.GetResult<Tabb>(); 

estoy recibiendo los valores de las columnas de las tablas pero quiero que el interior Registrado columnas también. me he referido a muchos blogs y foros, como ...

  1. Ben Hall's Blog
  2. Guy Burstein's Blog
  3. Microsoft's Blog

... para tratar de encontrar una solución a mi problema, pero no pude encontrar ninguno.

Respuesta

0

Tal vez esto sería una pregunta estúpida, pero en su proceso de almacenamiento:

select col1, Col2, Col3 from Tab1 
inner join Tab2 on col1=ColA join 
tab3 on Col1=ColD 

col1,col2,col3 son todos de tab1, pero nunca se hizo un select de las otras mesas que están tratando de hacer inner join. ¿Has intentado

select col1,col2,col3,colA,colB... 

-o-

select * from... 
+0

Estás loco .......... Pedí una solución en linq que resolveré mi problema no solicite una consulta –

+3

¡No hay necesidad de estar tan nervioso y ofensivo al respecto! Quizás no te entendí. ¿Podrías elaborarlo? ¿Desea que su procedimiento de tienda se reescriba en LINQ o ....? Por favor explica –

+4

@Umakanta es una forma muy mala de ser grosero con las personas que intentan ayudarlo.Además, su pregunta no era exactamente clara y podría confundir a una persona razonable. – Will

0

No estoy seguro de entender su necesidad, pero se puede cambiar el proc para volver * o todas las columnas de todas las tablas que necesita?

+0

NO I Disminuirá mi rendimiento y hay uniones, por lo que necesito algunas columnas particulares para devolver –

+0

Así que nombre todas las columnas que necesita devolver, eso es lo que quise decir con "o todas las columnas en todas las tablas que necesita" – Oakcool

+1

Esto no reducirá su rendimiento, seguramente disminuiría el rendimiento si necesitara otra consulta. – Oakcool

0

Si el procedimiento almacenado no devuelve los datos requeridos, entonces la única opción para LINQ sería que vuelva a consultar la base de datos.

Esto en general negaría el punto de tener un procedimiento almacenado y sería más lento que simplemente agregar los parámetros necesarios a su procedimiento almacenado.

2

mejor usar vistas con respecto a SP (Si no puede escribir una consulta linq a sql), si está utilizando Linq a Sql vale la pena utilizar Sp becoze para disminuir el rendimiento. Y una cosa más Si está utilizando Linq en sql, no es necesario utilizar ningún tipo de combinación si su base de datos está completamente normalizada. Si todavía tu problema no está resuelto solo muéstrame la estructura de la tabla y lo que necesites te escribiré una consulta para ti ...

+0

+1 a pesar de que está terriblemente redactado, es la respuesta correcta – HAL9000

Cuestiones relacionadas