2010-07-25 3 views
1
var customer= from cust in customerData 
       select new Customer 
       { 
       CustomerID = cust["id"], 
       Name = cust["Name"], 
       LastVisit = cust["visit"], 
       PurchashedAmount = cust["amount"], 
       Tagged = cust["tagged"] 
       Code = cust["code"] 
       } 

Les lignes se présente comme suitComment mettre à jour la colonne précédente de la ligne sur la base des données actuelles de la colonne de la ligne LINQ

Name LastVisit PurchasedAmount Tagged Code  CustomerID 
------ --------- --------------  ------ -----  ----- 
Joshua 07-Jan-09      Yes  chiJan01 A001 
Joshua    10000  

La 2ème ligne appartient à la première rangée juste que les autres colonnes sont empty.How peuvent je fusionne le PurchasedAmount dans la première ligne en utilisant LinQ?

+0

Et également supprimer la 2e ligne après la fusion de PurchasedAmount avec la première ligne. – Webbies

Répondre

1

Il s'agit probablement d'une solution plus générale que nécessaire - elle fonctionnera même si les autres valeurs sont dispersées entre les lignes. La condition principale est que la colonne Name identifie les lignes qui appartiennent ensemble.

customer = from c in customer 
      group c by c.Name 
      into g 
      select new Customer 
      { 
       Name = g.Key, 
       LastVisit = g.Select(te => te.LastVisit). 
          Where(lv => lv.HasValue).FirstOrDefault(), 
       PurchaseAmount = g.Select(te => te.PurchaseAmount). 
            Where(pa => pa.HasValue).FirstOrDefault(), 
       Tagged = g.Select(te => te.Tagged). 
          Where(ta => ta.HasValue).FirstOrDefault(), 
       Code = g.Select(te => te.Code). 
         Where(co => !string.IsNullOrEmpty(co)).FirstOrDefault(), 
       CustomerID = g.Select(te => te.CustomerID). 
         Where(cid => !string.IsNullOrEmpty(cid)).FirstOrDefault() 

      }; 

Ceci renvoie une nouvelle IEnumerable avec les éléments groupés par Name et les valeurs non nulles sélectionnées (même effet que le déplacement PurchasedAmount à la première ligne et la suppression de la seconde dans le cas présent).

Notez que le code est basé sur l'hypothèse que LastVisit, PurchaseAmount et Tagged sont les types nullable (DateTime?, int? et bool?). Ainsi, l'utilisation de HasValue. Si, cependant, ils sont des chaînes dans votre cas, vous devez utiliser !string.IsNullOrEmpty() à la place (comme pour Code et CustomerID).

Questions connexes