2011年7月12日 星期二

#VB Sum of data in datatable USING LINQ

Sum of data in datatable USING LINQ


http://www.experts-exchange.com/Programming/Languages/.NET/LINQ/Q_24011531.html



Sum a data table using LINQ


==========================================================

用上面的方式,又會碰到一些轉型的問題

integer 無法轉成 IEnumrelb(of T)  T -> datarow

要再想其他方法


靠過不暸,目前不知道怎麼弄才可以過型別問題,
應該是可以,只是我LINQ太不會了


嘗試透過 table的 select 解決問題



在 DataTable 進行 Group by 並且取 Sum 的運算


透過 DataSet 加入一個該Table的複本,
然後坐一個Relation
透過Relation去做

碰到說 Relation 必須在你有設定 table 資料的 主鍵欄位是哪個
並且該 table 已經依照主鍵去區分資料,不會有重複主鍵值的出現
跟現在的需求根本不符

            '設定table 的 主鍵
            Dim keys(1) As DataColumn
            keys(0) = tblMRP.Columns("物料編號")
            tblMRP.PrimaryKey = keys

            '相同物料合併作加總
            '分組並計算 
            Dim grouped As New DataTable
            '以物料編號做 Distinct
            grouped = tblMRP.DefaultView.ToTable("DistinctTable", True, "物料編號")

            ds.Tables.Add(grouped)

            '在DataSet中,以 物料編號 去做Table的Relation (關係名稱,父,子)
            '使用Relations,必須將資料作 Primary key 的設定
            ds.Relations.Add("Relation1", tblMRP.Columns("物料編號"), grouped.Columns("物料編號"))

            grouped.Columns.Add("SumValue", Type.GetType("System.Decimal"), "Sum(Child.預估用量)")

            For Each dr In grouped.Rows
                'Dim key As DataRow = dr("GroupKey")
                'Dim value As DataRow = dr("SumValue")

                tblMRP.Rows.Add(dr)
            Next


有夠不順
=====================================================================
透過 ADO.NET的原始方法
先用DefaultView建立一個 Distinct 副本的 table (只含有Primary Key)
然後再加入其他原始table 應該有的欄位

之後去比對 Distinct table 跟 非Distinct table 兩個資料
就可以做後面的加總處理

碼的...

沒有留言:

張貼留言