2012-01-20 21 views
5

Ho un metodo WCF che mi restituisce una serie di oggetti personalizzati come "utenti", "ruoli" o qualcos'altro e ha l'output di pagina. Il metodo WCF ha il parametro out, le stored procedure selezionano le righe e restituiscono i record totali di tutte le righe (non solo selezionate), rispetto al valore restituito nel parametro out. Ma c'è un problema che chiamo il metodo WCF nell'espressione lambda:. Espressione lambda netta e parametro out

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

quale soluzione migliore per il mio esempio?

+1

puoi chiarire qual è la tua domanda o problema è? – BrokenGlass

+0

Il mio problema è che i parametri out non possono essere usati in lambda, cosa dovrei cambiare in architettura del mio wcf o di un'altra parte? –

+0

Sarebbe molto meglio se creasse un semplice codice che potrebbe essere copiato con una semplice copia di VS, quindi potrò aiutarti. – Restuta

risposta

2

Non ho provato lambda con parametri fuori, ma di solito solo bisogno di dichiarare la variabile in anticipo:

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

Edit:

la soluzione migliore potrebbe da avvolgere GetAllUsers con un separato classe che può utilizzare il parametro 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

grazie per la risposta, ma questo codice emetterà un errore! –

+0

che tipo di errore? – Restuta

+0

Errore Impossibile utilizzare il parametro ref/out 'totalRecords' all'interno di un metodo anonimo, espressione lambda o espressione query –

Problemi correlati