2011-07-15 5 views
-5
public class Budget 
{ 
    public string SeasonNo { get; set; } 
    public string SeasonName { get; set; } 
    public string typeProductCd { get; set; } 
    public string typeProductDescription { get; set; } 
    public Decimal UsdBudgetRetail { get; set; } 
} 

List<Budget> list1 

List<Budget> list2 

List<Budget> ListUngrouped = 
    list1.Concat(list2).ToList(); 

List<Budget> listGrouped = ListUngrouped 
    .GroupBy(x => new { x.SeasonNo, x.typeProductCd }) 
    .Select(group => new { group.Key, UsdBudgetRetail = group.Sum(x => x.UsdActualRetail) }) 
    .Cast<BudgetAndActualLineInfoBySeasonDto>() 
    .ToList(); 
+3

Quelle est votre question? vous pourriez vouloir clarifier ce dont vous avez besoin si vous voulez de l'aide. – Taryn

+0

Où 'UsdActualRetail' est-il défini? Où est défini 'BudgetAndActualLineInfoBySeasonDto'? Comment 'list1' et' list2' sont-ils remplis? Comment lancez-vous 'List ' 'Liste '? Quel est le comportement que vous avez eu et quel était le comportement attendu? Si vous avez une exception, publiez le message d'exception et le numéro de ligne où il s'est produit. Pouvez-vous fournir un exemple de code * complet *, ** travail ** qui illustre le problème que vous rencontrez? – mellamokb

Répondre

2

On ne sait pas très bien ce que vous essayez d'accomplir. Voici quelques problèmes avec votre code tel qu'il est en ce moment qu'il faudra aborder:

  1. Budget ne contient pas de définition de UsdActualRetail.
  2. List<BudgetAndActualLineInfoBySeasonDto> ne peut pas être casté en List<Budget>.
  3. L'objet group ne peut pas être implicitement casté en BudgetAndActualLineInfoBySeasonDto.
  4. J'ai déjà corrigé des fautes d'orthographe de BUDGET, concat, et toList.
  5. Pour que le regroupement fonctionne, vous devez fournir une implémentation personnalisée pour la comparaison d'égalité pour votre objet GroupBy.

Faire un tas de suppositions éclairées sauvages sur la façon dont vous voulez que ce code fonctionne et quelles sont les définitions des autres classes manquantes pourrait être, voici un (LINQPad prêt) complete working code sample qui montre les valeurs et les sommes regroupées, avec une mise en œuvre d'égalité personnalisée de travail:

void Main() 
{ 
    List<Budget> list1 = new List<Budget>() { 
     new Budget { SeasonNo = "1", SeasonName = "Test 1", typeProductCd = "3", UsdActualRetail = 1.01m }, 
     new Budget { SeasonNo = "1", SeasonName = "Test 2", typeProductCd = "3", UsdActualRetail = 1.01m }, 
     new Budget { SeasonNo = "1", SeasonName = "Test 3", typeProductCd = "3", UsdActualRetail = 1.01m }, 
     new Budget { SeasonNo = "1", SeasonName = "Test 4", typeProductCd = "3", UsdActualRetail = 1.01m }, 
    }; 

    List<Budget> list2 = new List<Budget>() { 
     new Budget { SeasonNo = "2", SeasonName = "Test 5", typeProductCd = "4", UsdActualRetail = 1.02m }, 
     new Budget { SeasonNo = "2", SeasonName = "Test 6", typeProductCd = "4", UsdActualRetail = 1.02m }, 
     new Budget { SeasonNo = "2", SeasonName = "Test 7", typeProductCd = "4", UsdActualRetail = 1.02m }, 
    }; 

    List<Budget> listUngrouped = list1.Concat(list2).ToList(); 

    List<BudgetAndActualLineInfoBySeasonDto> listGrouped = 
     listUngrouped 
      .GroupBy(x => new SeasonDto { SeasonNo = x.SeasonNo, typeProductCd = x.typeProductCd }) 
      .Select(group => new BudgetAndActualLineInfoBySeasonDto { 
       SeasonDto = group.Key, 
       UsdBudgetRetail = group.Sum(x => x.UsdActualRetail) 
      }) 
      .Cast<BudgetAndActualLineInfoBySeasonDto>() 
      .ToList(); 
    Console.WriteLine(listGrouped); 
} 

// Define other methods and classes here 

public class SeasonDto 
{ 
    public string SeasonNo { get; set; } 
    public string typeProductCd { get; set; } 

    public override bool Equals(object other) 
    { 
     SeasonDto otherS = other as SeasonDto; 
     if (otherS != null) 
     { 
      return this.SeasonNo.Equals(otherS.SeasonNo) && 
       this.typeProductCd.Equals(otherS.typeProductCd); 
     } 
     else 
     { 
      return false; 
     } 
    } 

    public override int GetHashCode() 
    { 
     return SeasonNo.GetHashCode() + typeProductCd.GetHashCode(); 
    } 
} 

public class BudgetAndActualLineInfoBySeasonDto 
{ 
    public SeasonDto SeasonDto { get; set; } 
    public decimal UsdBudgetRetail { get; set; } 
} 

public class Budget 
{ 
     public string SeasonNo { get; set; } 
     public string SeasonName { get; set; } 
     public string typeProductCd { get; set; } 
     public string typeProductDescription { get; set; } 
     public Decimal UsdActualRetail { get; set; } 
} 

Espérons que cela aide! Nous serons en mesure de mieux vous aider si vous pouvez améliorer considérablement votre question.

+0

Salut merci pour votre réponse, oui j'ai quelques erreurs dans les attributs, mais je vais vous expliquer l'idée principale. J'ai plusieurs liste de budget, je veux les grouper d'abord par saison que par typeProductCD – user847236

+0

Salut merci pour votre réponse, oui j'ai quelques erreurs dans les attributs, mais je vais expliquer l'idée principale. J'ai plusieurs liste de budget, je veux les regrouper d'abord par saison que par typeProductCD et faire la somme de USDActual au détail des éléments qui partagent le même UsdActualRetail. Je m'attends à une nouvelle liste en conséquence, donc je peux le gérer pour l'afficher dans un rapport, il n'y a pas BudgetAndActualLineInfoBySeasonDto c'est juste Budget (mon dto) et UsdBudgetRetail est UsdActualRetail – user847236