2009-11-24 6 views
1

Dans ma table, je prends mon client Id commeProblème dans la requête LINQ

Entrée actuelle: -

<client> 
    <ClientId>421</ClientId> 
    <Amount>100</Amount> 
<client> 
<client> 
    <ClientId>426</ClientId> 
    <Amount>200</Amount> 
<client> 
<client> 
    <ClientId>421</ClientId> 
    <Amount>300</Amount> 
<client> 
<client> 
    <ClientId>427</ClientId> 
    <Amount>400</Amount> 
<client> 
<client> 
    <ClientId>429</ClientId> 
    <Amount>500</Amount> 
<client> 
<client> 
    <ClientId>436</ClientId> 
    <Amount>600</Amount> 
<client> 
<client> 
    <ClientId>421</ClientId> 
    <Amount>900</Amount> 
<client> 

je dois interroger ce LINQ.

Je dois additionner le champ de montant pour seulement ID de client unique et le montrer comme enregistrement unique (par exemple: pour 421 il y a trois enregistrements de clientids) mais j'ai seulement besoin d'un 421 avec la somme de tout le montant client et le montant devrait afficher en (1300)

Et je besoin des autres valeurs de ID client tel qu'il est affiché avec cette

Enfin Ma sortie devrait être comme ça

421  1300 
426  200 
427  400 
429  500 
436  600 

Comment puis-je obtenir cette requête LINQ en utilisant XML LINQ

Répondre

4

Cela a fonctionné pour moi. Votre exemple XML est erroné aussi, manque fermeture </client>

var result = 
    from c in document.Elements("client") 
    group c by c.Element("ClientId").Value into grouped 
    select new 
    { 
     ClientId = grouped.Key, 
     TotalSum = grouped.Sum(g => Decimal.Parse(g.Element("Amount").Value)) 
    }; 

foreach (var group in result) 
    Console.WriteLine(group.ClientId + ": " + group.TotalSum); 

EDIT: Je chargé le XDocument comme suivre pour l'exemple:

var document = XElement.Parse(
@"  
<clients>  
<client> 
    <ClientId>421</ClientId> 
    <Amount>100</Amount> 
</client> 
<client> 
    <ClientId>426</ClientId> 
    <Amount>200</Amount> 
</client> 
<client> 
    <ClientId>421</ClientId> 
    <Amount>300</Amount> 
</client> 
<client> 
    <ClientId>427</ClientId> 
    <Amount>400</Amount> 
</client> 
<client> 
    <ClientId>429</ClientId> 
    <Amount>500</Amount> 
</client> 
<client> 
    <ClientId>436</ClientId> 
    <Amount>600</Amount> 
</client> 
<client> 
    <ClientId>421</ClientId> 
    <Amount>900</Amount> 
</client> 
</clients>", LoadOptions.PreserveWhitespace); 
+0

+1 m'a battu :). confirmer. cette réponse devrait donner la sortie désirée. – Kamal

+1

Pourquoi LoadOptions.PreserveWhitespace? –

+0

@Alex Merci Bon travail. –

0

Tout d'abord, assurez-vous que votre xml est correct. vos balises de fermeture manquent le /, vous aurez aussi besoin d'un élément racine.

XElement Results = XElement.Load(xmlfilepath); 
XNamespace NameSpace = Results.Name.Namespace; 
var xe = (from c in Results.Elements(NameSpace + "client") 
      group c by c.Element(NameSpace + "ClientId").Value into g 
      select new { clientid = g.Key, AmountTotal = g.Sum(h=>decimal.Parse(h.Element(NameSpace+"Amount").Value)) }).ToList(); 

alors vous pouvez foreach par le résultat et faire ce que vous devez faire