2017-06-14 179 views
0

任何人都可以告訴我如何將下面的代碼轉換爲linq.I試圖使用合同名稱從web.config文件獲取端點地址。將foreach轉換爲linq

我需要爲每個循環轉換爲linq。

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

我試過 string csEndPoint = clientSettings.Endpoints.FirstOrDefault(e => e.Contract ==「CsWebService.ICsWebService」)?. Address.ToString(); 但FirstOrDefault顯示錯誤ChannelEndpointElement doenot包含第一個或默認的定義 – poorna

+0

下一次當您提出問題時,請顯示您嘗試的內容幷包含有關錯誤和失敗的任何信息。不可能猜到'clientSettings.Endpoints'只實現'IEnumerable',而不是'IEnumerable '。 –

回答

5

LinqFirstOrDefault

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

.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

nope顯示錯誤在哪裏.. – poorna

+0

什麼是錯誤? –

+0

如果這不起作用,那麼你提到的foreach也應該不起作用。 –