顯示具有 LINQ 標籤的文章。 顯示所有文章
顯示具有 LINQ 標籤的文章。 顯示所有文章

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 兩個資料
就可以做後面的加總處理

碼的...

2011年6月21日 星期二

#LinQ 作資料查詢

碰到說
資料庫來源不同,建立成兩個 datatable, 該如何再進一步 SQL 篩選結合建立新的 datatable


可能需要透過 LinQ 這個東西來作
要查一下

使用 Visual Basic 撰寫 LINQ 入門

查詢 (Visual Basic)



' Data source.
Dim numbers() As Integer = {0, 1, 2, 3, 4, 5, 6}

' Query creation.
Dim evensQuery = From num In numbers _
                 Where num Mod 2 = 0 _
                 Select num

' Query execution.
For Each number In evensQuery
    Console.Write(number & " ")
Next

        ' Query execution.
        '似乎查詢語法的結果,每筆資料會是一個 datarow
        '所以用增加每個 row 的方式

        '不能直接把 LinQ 查詢出來的結果 tbl, 直接複製到 dataTable
        '透過 ImportRow(datarow) 來作,或是 evensQuery.CopyToDataTable 來複製或繫結

LINQ - join 與 let
http://blog.xuite.net/cppbuilder/blog/14800296

==============================================
太不熟了
馬上就碰到問題

從查詢中建立 DataTable (LINQ to DataSet)


偵錯 LINQ



================================================
太靠北了
因為資料數值 可能會包含 ''空白字元"
變成說我再比對欄位的時候
核對找不到資料.....
用trim()去掉頭尾的空白字元
===============================================

查詢DataRow欄位(LINQ to DataSet)


 LINQ的经典例子-Where,Select、SelectMany、SkipWhile子句中使用数组索引


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

SELECT 在使用上
如果有創造或是結合成為新的 datarow 時
要用 SELECT NEW WITH {
                           裡面放自訂的欄位
                              .自訂欄位 = 某個值
                            或是說
                            放原本宣告的 dataTable
                               a, b ........
                                             }

當下 LinQ 字串時
宣告承接 LinQ 字串 的變數型別
要與 SELECT 出來的 型別相當
例如
query as IEnumerable(Of DataRow)
無法承接
SELECT NEW WITH { a, b }
因為 a, b 兩個都是 DataRow,


發現是跟 LINQ 的 select 之下 是 匿名型別
在指定完欄位以後該如何轉換匿名型別為目標型別?


LinQ 學習筆記 – LinQ to SQL

========================================
換個效能不佳的方式先解
用flag去紀錄核對的兩個 table 哪筆資料應該被撈出來
再寫回去 table 裡面 (視情況建立新欄位)