2011-03-23 32 views
2

目標:
如果有任何重複,應將其合併爲一個例如「_name:a」,_quantity:3「和」_name:a「,_quantity:6」應該合併到「_name:a」,_quantity:9「與其他數據重複或沒有。合併重複數據而不影響LINQ代碼中的其他數據

問題: 我有一個列表有很多的數據,我不知道如何合併重複數據合併成一個單位+它不應該影響他人,如果可能的話,希望每一次都發生在同一個列表中,而不需要創建更多的列表來獲得結果

List<Sale> myList = GetAllSalesList() 


public classs Sale 
{ 
    public string _name; 
    public string _quantity; 
} 
+1

因此,對於重複,你刪除所有,但一行和更新一行的數量是多少?還是你刪除所有行並創建一個新的?你有FK限制嗎? – 2011-03-23 20:31:32

+0

在這種情況下,不涉及數據庫。是的,不知何故,你正在更新一行+從列表中刪除一行。 FK不會涉及 – 2011-03-23 20:37:02

+1

'_quantity'是一個字符串嗎?那是對的嗎 ? – digEmAll 2011-03-23 20:46:57

回答

3

這樣的事情?

var mergedList = 
myList.GroupBy(x => x._name) 
     .Select(g => new Sale{_name = g.Key, _quantity = g.Sum(x => x._quantity)}) 
     .ToList(); 

編輯:

我剛剛注意到_quantitystring,是正確的?
如果是,使用Sum()改變一段代碼,以:

g.Sum(x => int.Parse(x._quantity)).ToString() 
當然

如果_quantity表示int ......以其他方式使用doubledecimal等等

1

你可以這樣做通過分組

var query = from sales in list 
      group sale by _name into grouped 
      select new Sale 
      { 
       _name = grouped.Key, 
       _quantity = grouped.Sum(x => x._quantity) 
      }; 

var groupedList = query.ToList(); 

更多關於分組,請參閱在101頁中的實際例子 - http://msdn.microsoft.com/en-us/vcsharp/aa336746.aspx

注 - 這個回答假設_quantity實際上是一個int和整數溢出不是一個問題

+0

你能解釋一下我以前從未見過的鑰匙嗎? – 2011-03-23 20:36:07

+0

LINQ group by創建一個'IEnumerable >'。 'Key'是'IGrouping'對象的關鍵 – digEmAll 2011-03-23 20:38:10

+0

關鍵是您在使用「group」時分組的東西。看一下Group By的例子 - http://msdn.microsoft.com/en-us/vcsharp/aa336754.aspx#simple1 - 或者試試......掛上我會找到一個教程! – Stuart 2011-03-23 20:38:43

0
var aggregateList = 
    myList.GroupBy(i => i._name) 
      .Select(g => new Sale 
     { 
      _name = g.Key, 
      _quantity = g.Sum(x => Convert.ToInt64(x._quantity)).ToString() 
     }) 
     .ToList(); 
+0

+1'Convert.ToInt64()' – 2011-03-23 20:42:03

相關問題