GetDictionary從DataTableHelp數(shù)據(jù)中,從指定兩列中,獲取不重復的字典 。我們可以指定返回字典的Key、Value的數(shù)據(jù)類型。
語法:
GetDictionary<TKey,TValue>(ColumnNames,Filter,Sort)
參數(shù)說明
名稱 | 說明 |
ColumnNames | 必填項,字符串類型,列名稱,從此列中提取不重復的值。 |
Filter | 可選參數(shù),指定一個條件表達式,只返回符合此條件的值。 |
Sort | 可選參數(shù),指定排序列,如果省略,則根據(jù)取值列排序,通常無需設(shè)置。 |
訂單狀態(tài)表中數(shù)據(jù)如下:
Vb.Net |
Dim db As Database=Proj.SysDataFactory("UserDB") '先獲取DataTableHelp數(shù)據(jù) Dim dt As DataTableHelp=db.ExecuteDataTableHelp("select * from 訂單狀態(tài)") '獲取字典 Dim dic As Dictionary(Of Integer,String)=dt.GetDictionary(Of Integer,String)("狀態(tài)ID,狀態(tài)名","","狀態(tài)ID") '遍歷字典并顯示 For Each item As KeyValuePair(Of Integer,String)In dic Proj.MsgDebug.Add(item.Key.ToString()+"|"+item.Value) Next '返回結(jié)果:1|待收貨 '返回結(jié)果:2|已部分收貨 '返回結(jié)果:3|完結(jié) |
C# |
Database db = Proj.SysDataFactory["UserDB"]; // 先獲取DataTableHelp數(shù)據(jù) DataTableHelp dt = db.ExecuteDataTableHelp("select * from 訂單狀態(tài)"); // 獲取字典 Dictionary<int, string> dic = dt.GetDictionary<int, string>("狀態(tài)ID,狀態(tài)名", "", "狀態(tài)ID"); // 遍歷字典并顯示 foreach (KeyValuePair<int, string> item in dic) { Proj.MsgDebug.Add(item.Key.ToString() + "|" + item.Value); } //返回結(jié)果:1|待收貨 //返回結(jié)果:2|已部分收貨 //返回結(jié)果:3|完結(jié) |
我們知道獲取單列不重復值使用GetUniqueValues,獲取兩列不重復值用GetDictionary,那么獲取兩列以上的多列不重復值用什么方法呢?我們可以考慮用DataView.ToTable方法。
Vb.Net |
Dim db As Database=Proj.SysDataFactory("UserDB") '先獲取DataTableHelp數(shù)據(jù) Dim dt As DataTableHelp=db.ExecuteDataTableHelp("select * from 訂單信息") Proj.MsgDebug.Add("總數(shù)據(jù)共{0}條:",dt.DataRows.Count) '獲取字典 Dim dtResult As DataTableHelp=dt.DataView.ToTable(True,"產(chǎn)品,客戶,業(yè)務(wù)員".Split(",")).GetDataTableHelp() Proj.MsgDebug.Add("不重復數(shù)據(jù)共{0}條:",dtResult.DataRows.Count) If dtResult IsNot Nothing AndAlso dtResult.DataRows.Count>0 Then '重新按產(chǎn)品,客戶,業(yè)務(wù)員排序后遍歷 For Each dr As RowData In dtResult.Select("","產(chǎn)品,客戶,業(yè)務(wù)員") Proj.MsgDebug.Add(dr("產(chǎn)品").ToString()+"|"+dr("客戶").ToString()+"|"+dr("業(yè)務(wù)員").ToString()) Next End If '返回結(jié)果:總數(shù)據(jù)共2003條: '返回結(jié)果:不重復數(shù)據(jù)共125條: '返回結(jié)果:產(chǎn)品01|客戶01|業(yè)務(wù)員01 '返回結(jié)果:產(chǎn)品01|客戶01|業(yè)務(wù)員02 '返回結(jié)果:產(chǎn)品01|客戶01|業(yè)務(wù)員03 '返回結(jié)果:產(chǎn)品01|客戶01|業(yè)務(wù)員04 '返回結(jié)果:產(chǎn)品01|客戶01|業(yè)務(wù)員05 '返回結(jié)果:產(chǎn)品01|客戶02|業(yè)務(wù)員01 '返回結(jié)果:產(chǎn)品01|客戶02|業(yè)務(wù)員02 '返回結(jié)果:產(chǎn)品01|客戶02|業(yè)務(wù)員03 '返回結(jié)果:產(chǎn)品01|客戶02|業(yè)務(wù)員04 '返回結(jié)果:產(chǎn)品01|客戶02|業(yè)務(wù)員05 '……后面結(jié)果太多,就不全貼出來了 |
C# |
Database db = Proj.SysDataFactory["UserDB"]; // 先獲取DataTableHelp數(shù)據(jù) DataTableHelp dt = db.ExecuteDataTableHelp("select * from 訂單信息"); Proj.MsgDebug.Add("總數(shù)據(jù)共{0}條:", dt.DataRows.Count); // 獲取字典 DataTableHelp dtResult = dt.DataView.ToTable(true, "產(chǎn)品,客戶,業(yè)務(wù)員".Split(',')).GetDataTableHelp(); Proj.MsgDebug.Add("不重復數(shù)據(jù)共{0}條:", dtResult.DataRows.Count); if (dtResult != null && dtResult.DataRows.Count > 0) { // 重新按產(chǎn)品,客戶,業(yè)務(wù)員排序后遍歷 foreach (RowData dr in dtResult.Select("", "產(chǎn)品,客戶,業(yè)務(wù)員")) { Proj.MsgDebug.Add(dr["產(chǎn)品"].ToString() + "|" + dr["客戶"].ToString() + "|" + dr["業(yè)務(wù)員"].ToString()); } } // 返回結(jié)果:總數(shù)據(jù)共2003條: // 返回結(jié)果:不重復數(shù)據(jù)共125條: // 返回結(jié)果:產(chǎn)品01|客戶01|業(yè)務(wù)員01 // 返回結(jié)果:產(chǎn)品01|客戶01|業(yè)務(wù)員02 // 返回結(jié)果:產(chǎn)品01|客戶01|業(yè)務(wù)員03 // 返回結(jié)果:產(chǎn)品01|客戶01|業(yè)務(wù)員04 // 返回結(jié)果:產(chǎn)品01|客戶01|業(yè)務(wù)員05 // 返回結(jié)果:產(chǎn)品01|客戶02|業(yè)務(wù)員01 // 返回結(jié)果:產(chǎn)品01|客戶02|業(yè)務(wù)員02 // 返回結(jié)果:產(chǎn)品01|客戶02|業(yè)務(wù)員03 // 返回結(jié)果:產(chǎn)品01|客戶02|業(yè)務(wù)員04 // 返回結(jié)果:產(chǎn)品01|客戶02|業(yè)務(wù)員05 // ……后面結(jié)果太多,就不全貼出來了 |