2017-06-14 9 views
0

誰でも私に以下のコードをlinqに変換する方法を教えてもらえますか?契約名を使用してweb.configファイルからエンドポイントアドレスを取得しようとしています。foreachをlinqに変換する

ループごとに以下のようにlinqに変換する必要があります。 FirstOrDefault

string csEndPoint = clientSection.Endpoints.Cast<ChannelEndpointElement>().FirstOrDefault(e => e.Contract == "CsWebService.ICsWebService")?.Address.ToString(); 

string csEndPoint =null; 
ClientSection clientSettings = ConfigurationManager.GetSection("system.serviceModel/client") as ClientSection; 
    foreach (ChannelEndpointElement endpoint in clientSettings.Endpoints) { 
        if (endpoint.Contract == "CsWebService.ICsWebService") { 
         ccEndPoint = endpoint.Address.ToString(); 
         break; 
        } 
       } 
+1

を試してみてください。どこで失敗しましたか? –

+0

私はこれを試しました 文字列csEndPoint = clientSettings.Endpoints.FirstOrDefault(e => e.Contract == "CsWebService.ICsWebService")?Address.ToString(); FirstErDefaultにエラーが表示されていますChannelEndpointElement doenotに最初またはデフォルトの定義が含まれています – poorna

+0

次回質問をしたときに、試したことを示し、エラーや失敗の情報を含めてください。 'clientSettings.Endpoints'は' IEnumerable 'ではなく' IEnumerable'だけを実装していると推測するのは不可能でした。 –

答えて

5

Linqアプローチ.NET 4.5および

string csEndPoint = clientSection.Endpoints.Cast<ChannelEndpointElement>() 
           .Where(e => e.Contract == "CsWebService.ICsWebService") 
           .Select(x => x.Address.ToString()).FirstOrDefault(); 
1

の下に、私はあなたが何かをしようとしたと確信しているこの

string csEndPoint = (from k in clientSettings.Endpoints 
     where k.Contract == "CsWebService.ICsWebService" 
     select k.Address.ToString()).FirstOrDefault(); 
+0

どこにエラーが表示されないのですか? – poorna

+0

エラーは何ですか? –

+0

これが機能しない場合は、あなたが言及したforeachもうまくいかないはずです。 –