2013-10-22 54 views
0

我有它的數據看起來像這樣發現總匹配類別名稱

<Companies> 
    <Company> 
    <Name>Company123</Name> 
    <Sales> 
     <Sale> 
     <Code>Sale123</Code> 
     <Category>Apple</Category> 
     <Amount>150.50</Amount> 
     </Sale> 
     <Sale> 
     <Code>Sale234</Code> 
     <Category>Mango</Category> 
     <Amount>170.50</Amount> 
     </Sale> 
     <Sale> 
     <Code>Sale345</Code> 
     <Category>Apple</Category> 
     <Amount>160.50</Amount> 
     </Sale> 
    </Sales> 
    </Company> 
    <Company> 
    //other values 
    </Company> 
</Companies> 

這裏是類我現在我已經來存儲這些信息

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

     public List<Company> AllCompanies; 

    } 
    public class Company 
    { 
     public Company() 
     { 
      Saleses = new List<Sales>(); 
     } 

     public string Name; 
     public string Code; 
     public double MaintenancePercentage; 
     public double AverageSales; 
     public double TotalSales; 
     public double TotalMaintenanceFee; 
     public List<Sales> Saleses; 

    } 
    public class Sales 
    { 
     public string Code; 
     public string Title; 
     public DateTime DateTime; 
     public string Category; 
     public double Amount; 
    } 

一個xml文件能夠找到公司的總銷售額,但我不知道如何找到相同類別的總銷售額。 這裏是我做了什麼

var companies = (from c in doc.Descendants("Company") 
          select c).ToList(); 
      foreach (var xCompany in companies) 
      { 
       var sales = (from xElement in xCompany.Descendants("Sale") select xElement).ToList(); 

       var company = new Company() 
        { 
         Name = ((from x in xCompany.Descendants("Name") select x.Value).First()), 
         Code = (from x in xCompany.Descendants("Code") select x.Value).First(), 
         MaintenancePercentage = 
          Convert.ToDouble((from x in xCompany.Descendants("MaintenancePercentage") select x.Value).First()) 
        }; 
       for (int index = 0; index < sales.Count; index++) 
       { 
        var xElement = sales[index]; 
        var sale = new Sales() 
         { 
          Code = ((from x in xElement.Descendants("Code") select x.Value).First()), 
          Title = ((from x in xElement.Descendants("Title") select x.Value).First()), 
          DateTime = Convert.ToDateTime((((from x in xElement.Descendants("Date") select x.Value).First()))), 
          Category = ((from x in xElement.Descendants("Category") select x.Value).First()), 
          Amount = Convert.ToDouble(((from x in xElement.Descendants("Amount") select x.Value).First())) 
         }; 
        company.Saleses.Add(sale); 
       } 
       company.TotalSales = repository.GetTotalSales(company); 
       company.AverageSales = repository.AverageSales(company); 
       company.TotalMaintenanceFee = repository.MaintenanceFee(company); 

       companiesList.AllCompanies.Add(company); 


      } 
      #endregion 
      #region WriteData 
      foreach (var xElement in companiesList.AllCompanies) 
      { 
       Console.ForegroundColor = ConsoleColor.Green; 
       Console.WriteLine("Company Name: " + xElement.Name); 
       Console.ResetColor(); 
       Console.WriteLine("Company Code: "+xElement.Code); 
       Console.WriteLine("Company Maintenance percentage: "+xElement.MaintenancePercentage); 
       Console.WriteLine("Company Total sales: " + xElement.TotalSales); 
       Console.WriteLine("Total maintenance fee: "+ xElement.TotalMaintenanceFee); 
       Console.WriteLine("Company Average sales: " + xElement.AverageSales); 
       Console.ForegroundColor = ConsoleColor.Blue; 
       Console.WriteLine("Linked sales:"); 
       Console.ResetColor(); 
       foreach (var sale in xElement.Saleses) 
       { 
        Console.WriteLine("Code: "+ sale.Code); 
        Console.WriteLine("Title: " + sale.Title); 
        Console.WriteLine("Date: " + sale.DateTime); 
        Console.WriteLine("Category: " + sale.Category); 
        Console.WriteLine("Amount: " + sale.Amount); 
       } 
       Console.WriteLine(" "); 
      } 
      #endregion 
      Console.ReadLine(); 
     } 
    } 

如何顯示總的匹配類型的示例代碼?

回答

1

按類別試試這個,集團銷售,然後計算每個類別的總金額。

var categoryTotals = company.Saleses 
      .GroupBy (c => c.Category) 
      .Select (
       g => 
        new 
        { 
        Category = g.Key, 
        Total = g.Sum(s => s.Amount) 
        } 
      ); 

foreach(var categoryTotal in categoryTotals) 
{ 
    Console.WriteLine(string.Format("Category: {0}, Total: {1}", 
     categoryTotal.Category, categoryTotal.Total.ToString())); 
} 
0

這個怎麼樣:

string iceCreamCategory = "IceCream"; 
double iceCreamTotal = company.Saleses 
    .Where(sale => sale.Category == iceCreamCategory) 
    .Sum(sale => sale.Amount); 
+0

這聽起來真棒,但在這裏,你知道類別的名稱,但在我實際的XML文件,我必須存放不同類別名稱的名字不知何故,並檢查類別名稱在該變量持有不同的類別名稱匹配,如果名稱匹配,則添加。那個怎麼樣? – Cybercop

+0

哦,好的。我以爲你只是在尋找一個特定的類別。在這種情況下,埃斯特萬的答案應該做你想做的。 – gehho