2014年7月10日 星期四

[學習] 從自訂義類別中查詢 linq & lambda

說明:
主細表 Master-Detail
中幫USER自動瀘掉, Detail DGV某欄位(combobox)已存在的選項(ex: A 與 B)
當DGV AddNewRow時, 自動選出不包含A 與 B 的第一個選項(ex: C)

解決:
不知怎麼直接截取DGV當時對應於Master畫面的選項值
ex:
MasterA -> Detail A,B
MasterB -> Detail C

所以只好重新從D etail DataTable select 出來

籂選出DataRow
Dim b() As DataRow = CType(bs_tblB備案手冊號基本資料表進口項次.DataSource, DataSet).Tables(tblProductName).Select("手冊編號='" & txt_手冊編號.Text & "' AND 進口項次號=" & txt_進口項次號.Text)

將DataRow取其中一個欄位,並轉成陣列
Dim c = b.Select(Function(o) o("產品大類")).ToArray

飾選出來共有這麼多
MsgBox(CType(CType(dgv_項次產品.Columns("產品大類"), DataGridViewComboBoxColumn).DataSource, List(Of Mdl.tblBProductsType)).Where(Function(o) Not c.Contains(o.ProductsTypeID)).Count)

找出第一筆要的欄位資料
MsgBox(CType(CType(dgv_項次產品.Columns("產品大類"), DataGridViewComboBoxColumn).DataSource, List(Of Mdl.tblBProductsType)).Where(Function(o) Not c.Contains(o.ProductsTypeID))(0).ProductsTypeID)

參考:
逐步解說:使用兩個 Windows Form DataGridView 控制項建立主要/詳細表單
[學習] Master-Detail 父子表(主細表)

LINQ運算式基本構成子句
Lambda 運算式 (Visual Basic)
Visual Basic 中的 LINQ 簡介
[VB.NET]Lambda運算式
Lambda Expression for “not in”?
How to implement NOT IN clause in LINQ/LAMBDA Query expression?Explain with an example.
[C#][LINQ]動態組Where條件
How to select a field with linq on datarow
[LINQ] 查詢DataRow欄位(LINQ to DataSet)
VB.Net Linq - How to append a where clause?
How would you do a “not in” query with Linq?
Linq to Datarow, Select multiple columns as distinct?
Use LINQ to get items in one List<>, that are not in another List<>
LINQ - 在WHERE條件式中使用IN與NOT IN
LINQ to SQL 可以做到的功能
LINQ to Object - VB.NET
how to filter list in c# with lambda expression?
Filtering collections in C#

DataRow.GetChildRows 方法 (DataRelation)
比較 DataRow (LINQ to DataSet)