Sempre di più Linq mi toglie dalle problematiche più ostiche in fatto di Integrazione con i sistemi LOB.
Vediamo il caso:
Su un portale di eCommerce che si integra con SAP per gli ordini è stato creato un web service per la gestione del Tracking per controllare la quantità consegnata di ogni singolo prodotto.
Per ogni prodotto abbiamo una posizione che contiene quantià ordinata e quanta consegnata, fin qui niente di particolare ma può capitare(in particolare per i prodotti in promozione) che SAP splitti le posizioni e che per uno stesso prodotto ci troviamo 2 o più posizioni.
Es:
Prodotto1-QtaOrdinata=100-QtaConsegnata=100
Prodotto2-QtaOrdinata=100-QtaConsegnata=80
Prodotto2-QtaOrdinata=50-QtaConsegnata=50
Prodotto3-QtaOrdinata=50-QtaConsegnata=50
Prodotto3-QtaOrdinata=40-QtaConsegnata=20
E il risultato che vogliamo mostrare al cliente finale è una singola riga per prodotto con la somma della quantità ordinata e la somma della quantià consegnata come avviene in tutti i tracking.
Se invece di sap il datasource era un database ci bastava fare un raggruppamento in base al codice prodotto, bene con LINQ possiamo fare la stessa identica cosa ma su un'array in questo modo
Posizioni[] posizioni = orderDetail.Posizioni;
var myPos = from p in posizioni
group p by p.CodiceProdotto into prod
select new { ProductID = prod.Key,
Desc = prod.First().ShortText,
orderQty = prod.Sum(p => p.QtaOrdinata),
consQty = prod.Sum(p => p.QtaConsegnata)
};
Che dire adoro sempre di più LINQ