2013-10-22 5 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

카테고리하여, 그룹의 판매를 시도하고 각 범주에 대한 총 금액을 계산합니다.

멋진 소리 그러나 여기 당신이 카테고리의 이름을 알고,하지만 내 실제 XML 파일에서 어떻게 든 다른 카테고리 이름의 이름을 저장하고 카테고리 이름은 다른 카테고리의 이름을 보관 유지하는 변수와 일치하는지 확인해야
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

, 이름이 일치하면 추가하십시오. 그게 뭐야? – Cybercop

+0

오, 알겠습니다. 나는 당신이 특정 범주를 찾고 있다고 생각했습니다. 이 경우 에스테반의 대답은 당신이 원하는대로해야합니다. – gehho

관련 문제