LINQ - groupe / somme de plusieurs colonnes
De données est un fichier CSV qui est chargé dans un ado.net dataset via OleDB. La table a+ de 40 colonnes comprenant les détails de la facture. Chaque ligne est une ligne distincte à l'intérieur d'une facture, qui peut être composé de 1 à n lignes.
La requête est utilisée pour regrouper les détails de la facture en une seule ligne par facture, totalisant le montant de la facture et le solde dû.
Les ouvrages suivants, ce que j'essaie de déterminer:
Est-il possible de le faire en une seule requête?
//group the invoices by invoicenumber and sum the total
//Zoho has a separate record (row) for each item in the invoice
//first select the columns we need into an anon array
var invoiceSum =
DSZoho.Tables["Invoices"].AsEnumerable()
.Select (x =>
new {
InvNumber = x["invoice number"],
InvTotal = x["item price"],
Contact = x["customer name"],
InvDate = x["invoice date"],
DueDate = x["due date"],
Balance = x["balance"],
} );
//then group and sum
var invoiceTotals =
invoiceSum
.GroupBy (s => new {s.InvNumber, s.Contact, s.InvDate, s.DueDate} )
.Select (g =>
new {
InvNumber = g.Key.InvNumber,
InvDate = g.Key.InvDate,
DueDate = g.Key.DueDate,
Contact = g.Key.Contact,
InvTotal = g.Sum (x => Math.Round(Convert.ToDecimal(x.InvTotal), 2)),
Balance = g.Sum (x => Math.Round(Convert.ToDecimal(x.Balance), 2)),
} );
source d'informationauteur topry
Vous devez vous connecter pour publier un commentaire.
Vous êtes, en fait, ne le faire qu'une seule requête lorsque vous utilisez le résultats de invoiceTotals. Dans le code, vous montrez que vous êtes encore pas faire une requête sur la base de données.
Google "linq exécution différée", c'est chouette 😉
Mais comme Uriil dit, vous pouvez combiner les interventions dans l'une requête linq: