2012-01-20 8 views
5

"users"、 "roles"などのカスタムオブジェクトの配列を返すWCFメソッドがあり、ページ出力があります。 WCFメソッドは、outパラメータで戻り値を読み取るよりも、outパラメータ、ストアドプロシージャ選択行、すべての行(選択されているだけではない)の合計レコードを返します。しかし、ラムダ式のWCFメソッドを呼び出す問題が1つあります。.netラムダ式と出力パラメーター

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

私の例ではどのような解決策がありますか?

+1

あなたはあなたの質問や問題を明確にすることができますありますか? – BrokenGlass

+0

私の問題は、outパラメータがラムダでは使用できないことです.wcfや他の部分のアーキテクチャーを変更する必要がありますか? –

+0

VSからコピーして簡単に実行できる簡単なコードを作成すれば、もっと手助けできるようになります。 – Restuta

答えて

2

私はパラメータを持つラムダを試していないが、通常、あなただけの変数事前に宣言する必要があります:

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

編集を:

あなたの最善の策は、独立したとGetAllUsersをラップすることでありout paramを使用できるクラス:

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

返信ありがとうございますが、このコードではエラーが発生します。 –

+0

どのようなエラーですか? – Restuta

+0

エラー匿名メソッド、ラムダ式、またはクエリ式 –