2010-07-25 21 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"] 
       } 

行的當前行的列數據更新先前的行列看起來像這樣如何根據使用LINQ

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

第2行所屬的第一行只是另一列是empty.How能我使用LinQ將PurchasedAmount合併到第一行?

+0

還可以在將PurchasedAmount與第一行合併後刪除第二行。 – Webbies 2010-07-25 12:31:15

回答

1

這可能是一種比您需要的更一般的解決方案 - 即使其他值分散在不同的行上,它也可以工作。主要條件是Name列應標識屬於一起的行。

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() 

      }; 

這將返回一個新IEnumerableName分組的項目,並選擇(如移動PurchasedAmount到第一行,並刪除你的情況下,第二效果相同)的非空值。

注意,代碼是基於以下假設:LastVisitPurchaseAmountTagged是可空類型(DateTime?int?bool?)。因此使用HasValue。但是,如果它們是您的情況下的字符串,則必須使用!string.IsNullOrEmpty()CodeCustomerID)。