2017-06-14 105 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也应该不起作用。 –