2012-01-20 11 views
5

Tengo un método WCF que me devuelve una matriz de objetos personalizados como "usuarios", "roles" u otra cosa, y tiene salida de página. El método WCF tiene el parámetro fuera, el procedimiento almacenado selecciona las filas y devuelve los registros totales de todas las filas (no solo las seleccionadas), entonces leí el valor de retorno en el parámetro de salida. Pero hay un problema que llamo WCF método de expresión lambda:.net expresión lambda y parámetro de salida

var client = MySvcRef.MySvcClient(); 
var assistant = FormsAuthenticationAssistant(); 
var result = assistant.Execute<MySvcRef.UserClass[]>(
    () => client.GetAllUsers(out totalRecords, pageIndex, pageSize), 
    client.InnerChannel); 

qué mejor solución para mi ejemplo?

+1

¿Puede aclarar cuál es su pregunta o problema? ¿es? – BrokenGlass

+0

Mi problema es que los parámetros no se pueden usar en lambda, ¿qué debo cambiar en la arquitectura de mi wcf u otra parte? –

+0

Sería mucho mejor si creara un código simple que podría copiarse y pasarse de VS, así que podré ayudarlo. – Restuta

Respuesta

2

No he probado con lambdas parámetros out, pero normalmente sólo tiene que declarar la variable de antemano:

var client = MySvcRef.MySvcClient(); 
var assistant = FormsAuthenticationAssistant(); 
var totalRecords; 
var result = assistant.Execute<MySvcRef.UserClass[]>(
()=>client.GetAllUsers(out totalRecords, pageIndex, pageSize), 
    client.InnerChannel); 

Editar:

Su mejor apuesta de mayo por GetAllUsers para envolver con una separada clase que puede usar el parámetro out:

Temp temp = new Temp(); 

var result = assistant.Execute<MySvcRef.UserClass[]>(()=>temp.GetAllUsers(client, pageIndex, pageSize),client.InnerChannel); 
int totalRecords = temp.TotalRecords; 

... 

class Temp 
{ 
    public int TotalRecords; 
    public MySvcRef.UserClass[] GetAllUsers(MySvcClient client, int pageIndex, int pageSize) 
    { 
     int totalRecords; 
     var result = client.GetAllUsers(out totalRecords, pageIndex, pageSize); 
     TotalRecords = totalRecords; 
     return result; 
    } 

} 
+0

gracias por la respuesta, ¡pero este código generará un error! –

+0

¿qué tipo de error? – Restuta

+0

Error No se puede usar el parámetro ref o out 'totalRecords' en un método anónimo, expresión lambda o expresión de consulta –

Cuestiones relacionadas