這邊要介紹一個我覺得還不錯的 Linq 的寫法,
可以用來查詢 Local 資料,
我覺得還蠻簡單的,
不用像 Filter 還要組 SQL 的字串,
方法如下:
- 首先我們宣告一個 DataTable 的變數,用來暫存一份資料複本。
- 然後在 DoLocalQuery() 中,第一次執行的時候把 localCache 建立起來,並且複製一份複本。
- 然後每次在查詢前從 localCache 複製一份到 dt 去。
- var query = dt.AsEnumerable(); <= 把 dt 轉換成 query。
- 再來就是判斷value1有值的話就去查詢,然後塞回query去。
- 然後就重複下去,看有幾個變數要查,其實這段可以變成一個函式。
- 查完之後用 query.CopyToDataTable() 轉成 DataTable。
- 最後把 dt 塞回去給 BindingSource 就完成啦!
程式碼如下:
之前寫了一個設定 BindingSource.Filter 的程式,
在 Form 上面只要呼叫一個設定的函式,就可以讓 Form 上面的 Filter 功能有作用,呼叫的方法如下:
CommQueries.SetFilterFunc(this, BindingSource, 查詢按鈕, 清除查詢條件按鈕,
new LookUpEdit[] { 查詢元件1, 查詢元件2, 查詢元件3, 查詢元件4 });
SetFilterFunc 的寫法如下:
很久很久以前(其實也沒多久前),
如果我們想要在欄位改變之前記下他的值,
然後提供後面其他的函數使用的話,
通常都會在改變之前記錄到一個全域的變數去,
然後在要使用的時候再從那個全域的變數讀出來;
不過有了 Lambda 之後我們有更簡潔的寫法,
寫法如下: