2010-03-14 3 views
0

HI j'espère avoir de l'aide avec une requête que j'ai.Suppression de valeurs d'une requête linq retournée

J'ai cette requête

var group = 
    from r in CustomerItem 
    group r by r.StoreItemID into g 
    select new { StoreItemID = g.Key, 
       ItemCount = g.Count(), 
       ItemAmount = Customer.Sum(cr => cr.ItemAmount), 
       RedeemedAmount = Customer.Sum(x => x.RedeemedAmount) 
       }; 

Je retourne mes résultats à une liste que je peux lier listbox.

J'ai une propriété appelée EntryType qui est un int. Il y a 2 numéros disponibles 1 ou 2

Disons que j'avais 3 articles que ma requête travaille avec

2 d'entre eux avaient le EntryType = 1 et 3 avait EntryType2. Les premiers enregistrements avaient un ItemAmount de 55.00 et le 3ème un ItemAmount de 50.00

Comment est-ce que je peux grouper quelque chose en utilisant simlar ci-dessus mais moins le ItemAmount de 50.00 du montant groupé pour retourner 60.00?

Toute aide serait géniale !!

+0

Qu'est-ce que 'Client' dans votre requête? –

+0

Il semble que vous ne vouliez pas supprimer de valeurs, vous voulez en ajouter et en soustraire d'autres. Votre titre est trompeur. –

Répondre

0

Il n'est pas vraiment clair quelle est la question - essayez-vous simplement d'ignorer tous les éléments avec un type d'entrée de 2? En d'autres termes, vous voulez seulement garder entrées avec un type d'entrée de 1? Si oui, il suffit d'ajouter une where clause:

var group = from r in CustomerItem 
      where r.EntryType == 1 
      group r by r.StoreItemID into g 
      select new { 
       StoreItemID = g.Key, ItemCount = g.Count(), 
       ItemAmount = Customer.Sum(cr => cr.ItemAmount), 
       RedeemedAmount = Customer.Sum(x => x.RedeemedAmount) 
      }; 
0

Changement ItemAmount = ... à:

ItemAmount = 
    g.Where(x => x.EntryType == 1).Sum(cr => cr.ItemAmount) - 
    g.Where(x => x.EntryType == 2).Sum(cr => cr.ItemAmount), 

J'ai changé Customer à g parce que cela semble être une erreur, mais ce n'est pas clair pour moi de votre question que vous voulez dire ici, alors peut-être que ce changement n'est pas ce que vous voulez.

Une méthode un peu plus concis consiste à utiliser tester le type d'entrée dans la somme et utiliser l'opérateur ternaire pour choisir d'ajouter la valeur positive ou négative:

ItemAmount = g.Sum(cr => cr.EntryType == 1 ? cr.ItemAmount : -cr.ItemAmount), 

Cela donne la valeur de 60,00 que vous Champs obligatoires.

Questions connexes