2013-10-22 35 views
0

我有以下代碼錯誤:無法投型的對象 'WhereSelectEnumerableIterator`2 [System.Xml.Linq.XElement,System.String]' 爲類型 'System.IConvertible'

var doc = XDocument.Load(@"export.xml"); 
    var companiesList = new Companies(); 

    var companies = (from c in doc.Descendants("Company") 
         select c).ToList(); 
    foreach (var xCompany in companies) 
    { 
     var company = new Company() 
     { 
      Name = (from x in xCompany.Descendants("Name") select x.Value).ToString(), 
      Code = (from x in xCompany.Descendants("Code") select x.Value).ToString(), 
      MaintenancePercentage = 
       Convert.ToDouble(from x in xCompany.Descendants("MaintenancePercentage") select x.Value) 
     }; 
     companiesList.AllCompanies.Add(company); 
    } 
    Console.WriteLine(companies); 
    Console.ReadLine(); 
} 

目前公司具有計數3000.我想把每個公司放在一個列表中。

public class Companies 
{ 
    public Companies() 
    { 
     AllCompanies = new List<Company>(); 
    } 

    public List<Company> AllCompanies; 
} 

public class Company 
{ 
    public string Name; 
    public string Code; 
    public double MaintenancePercentage; 
    public double AverageSales; 
    public double TotalSales; 
    public double TotalMaintenanceFee; 
    public List<Sales> Saleses; 
} 

裏面foreach語句我得到錯誤說 錯誤:Unable to cast object of type 'WhereSelectEnumerableIterator 2 System.Xml.Linq.XElement,System.String] '鍵入' System.IConvertible'.`

任何想法,我應該做些什麼來使其工作?

下面是示例XML代碼

<Companies> 
    <Company> 
    <Name>Name1</Name><Code>11014</Code>  
    <MaintenancePercentage>15.9</MaintenancePercentage> 
    <Sales> 
     <Sale> 
     <Code>19538</Code> 
     <Title>ABC</Title> 
     <Date>2009-04-29T00:00:00</Date> 
     <Category>Category1</Category> 
     <Amount>6543.39</Amount> 
     </Sale> 
     <Sale> 
     <Code>19539</Code> 
     <Title>xyz</Title> 
     <Date>2009-04-30T00:00:00</Date> 
     <Category>Category2</Category> 
     <Amount>654.39</Amount> 
     </Sale> 
    </Sales> 
    </Company> 

    <Company> 
    <Name>Name1</Name><Code>11014</Code>  
<MaintenancePercentage>15.9</MaintenancePercentage> 
    <Sales> 
     <Sale> 
     <Code>19538</Code> 
     <Title>ABC</Title> 
     <Date>2009-04-29T00:00:00</Date> 
     <Category>Category1</Category> 
     <Amount>6543.39</Amount> 
     </Sale> 
     <Sale> 
     <Code>19539</Code> 
     <Title>xyz</Title> 
     <Date>2009-04-30T00:00:00</Date> 
     <Category>Category2</Category> 
     <Amount>654.39</Amount> 
     </Sale> 
    </Sales> 
    </Company> 
</Companies> 

回答

0

試試這個:

Convert.ToDouble((from x in xCompany.Descendants("MaintenancePercentage") select x.Value).First()) 

爲什麼不使用反序列化?

要回答更加正確,有必要看到XML

+0

我覺得問題還在於將字符串轉換,我如何使用反序列化? – Cybercop

+0

您是否試過該片段? –

+0

我已經添加了xml示例代碼 – Cybercop

0

LINQ表達等

from x in xCompany.Descendants("Name") select x.Value 

不返回單個對象,所以適用於導致類似的ToString或Convert.ToDouble功能是不完全正確 以獲得一個單一的值使用該擴展方法:

相關問題