2014-10-31 86 views
0

检索唯一值我已经写了一个查询中使用的foreach
我试图从XML
任何一个可以只是一个更好的方法以检索不同BANKNAMETemplateModel检索不同的XML节点值写与IEnumerable的什么的查询类似的
我的XML是如下如何从XML

<Bank> 
<BankName BankName="DohaBank" TemplateModel="CT1"> 
    <ChqBasics>  
    </ChqBasics> 
    <XandYPosition>  
    </XandYPosition> 
</BankName> 
<BankName BankName="DohaBank" TemplateModel="CT2"> 
    <ChqBasics>  
    </ChqBasics> 
    <XandYPosition>   
    </XandYPosition>  
</BankName> 
<BankName BankName="IBQ" TemplateModel="CT1New"> 
    <ChqBasics>  
    </ChqBasics> 
    <XandYPosition>  
    </XandYPosition> 
</BankName> 

我的C#代码

public List<string> bankload() 
    { 
     List<string> bankname=new List<string>(); 
     XDocument doc = XDocument.Load("newtest.xml"); 
     var result= (from item in doc.Descendants("BankName") 
       select (string)item.Attribute("BankName")).Distinct(); 
     foreach (var item in result) 
     { 
      bankname.Add(item.ToString()); 
     } 
     return bankname; 
    } 

    public static List<string> templateload(string bankname) 
    { 
     List<string> templatename = new List<string>(); 
     XDocument doc = XDocument.Load("newtest.xml"); 
     var result = (from item in doc.Descendants("BankName") 
         where item.Attribute("BankName").Value == bankname 
         select (string)item.Attribute("TemplateModel")).Distinct(); 
     foreach (var item in result) 
     { 
      templatename.Add(item.ToString()); 
     } 
     return templatename; 
    } 

我需要的结果绑定到一个组合框

回答

1

为什么不这样做呢?

public List<string> bankload() 
{ 
    return 
    (
     from item in XDocument.Load("newtest.xml").Descendants("BankName") 
     select (string)item.Attribute("BankName") 
    ) 
     .Distinct() 
     .ToList(); 
} 

public static List<string> templateload(string bankname) 
{ 
    return 
    (
     from item in XDocument.Load("newtest.xml").Descendants("BankName") 
     where item.Attribute("BankName").Value == bankname 
     select (string)item.Attribute("TemplateModel") 
    ) 
     .Distinct() 
     .ToList(); 
} 

你的意思是这样的lambda?

public List<string> bankload() 
{ 
    return 
     XDocument 
      .Load("newtest.xml") 
      .Descendants("BankName") 
      .Select(item => (string)item.Attribute("BankName")) 
      .Distinct() 
      .ToList(); 
} 

public static List<string> templateload(string bankname) 
{ 
    return 
     XDocument 
      .Load("newtest.xml") 
      .Descendants("BankName") 
      .Where(item => item.Attribute("BankName").Value == bankname) 
      .Select(item => (string)item.Attribute("TemplateModel")) 
      .Distinct() 
      .ToList(); 
} 
+0

由于它的工作。你可以用lamda表达 – 2014-10-31 10:49:27

+0

这个代码吗?你的意思是这样吗? – Enigmativity 2014-10-31 10:54:32

+0

确切的...非常感谢...你很棒... – 2014-10-31 11:00:04

0

返回XML中的不同BANKNAME/TemplateModel组合的列表:

var result = doc.Descendants("BankName") 
       .Select(bn => new 
           { 
           BankName = bn.Attribute("BankName").Value, 
           TemplateModel = bn.Attribute("TemplateModel") 
                .Value 
           });