2011年7月22日 星期五

C# Linq 查詢 Local 資料的方法

這邊要介紹一個我覺得還不錯的 Linq 的寫法,
可以用來查詢 Local 資料,
我覺得還蠻簡單的,
不用像 Filter 還要組 SQL 的字串,
方法如下:
  1. 首先我們宣告一個 DataTable 的變數,用來暫存一份資料複本。
  2. 然後在 DoLocalQuery() 中,第一次執行的時候把 localCache 建立起來,並且複製一份複本。
  3. 然後每次在查詢前從 localCache 複製一份到 dt 去。
  4. var query = dt.AsEnumerable(); <= 把 dt 轉換成 query。
  5. 再來就是判斷value1有值的話就去查詢,然後塞回query去。
  6. 然後就重複下去,看有幾個變數要查,其實這段可以變成一個函式。
  7. 查完之後用 query.CopyToDataTable() 轉成 DataTable。
  8. 最後把 dt 塞回去給 BindingSource 就完成啦!
程式碼如下:

C# 有 Lambda 真好用【二】

之前寫了一個設定 BindingSource.Filter 的程式,
在 Form 上面只要呼叫一個設定的函式,就可以讓 Form 上面的 Filter 功能有作用,呼叫的方法如下:
CommQueries.SetFilterFunc(this, BindingSource, 查詢按鈕, 清除查詢條件按鈕,
    new LookUpEdit[] { 查詢元件1, 查詢元件2, 查詢元件3, 查詢元件4 });



SetFilterFunc 的寫法如下:

2011年7月21日 星期四

C# 有 Lambda 真好用

很久很久以前(其實也沒多久前),
如果我們想要在欄位改變之前記下他的值,
然後提供後面其他的函數使用的話,
通常都會在改變之前記錄到一個全域的變數去,
然後在要使用的時候再從那個全域的變數讀出來;
不過有了 Lambda 之後我們有更簡潔的寫法,
寫法如下:

2011年7月9日 星期六

解決 更新 Firefox 5 後 Google Toolbar 不見 或 不能使用的方法

在【Pogo Tsai 的 "新" 異空間】找到了一篇文章,
解決 更新 Firefox 5 後 Google Toolbar 不見 或 不能使用的方法
恩恩~~~試了一下!真的有用ㄟ!
其實 Google Toolbar 對我而言,
其實我只有在使用她的書籤功能而已,
也許等我找到替代的功能之後,
我應該對她就不會這麼執著了吧!

2011年6月7日 星期二

MS SQL 2008 - 防止儲存需要資料表重建的變更

 今天在設計資料表的時候,
當存檔後要再修改的時候就跳出了一個訊息,
【防止儲存需要資料表重建的變更】





這是甚麼鬼呀!連這個也擋住了!
好歹也去檢查一下資料表有沒有資料嘛!
上網查了一下,要手動把選項打開!
請參閱以下網址去打開選項吧!


[SQL] Microsoft SQL Server 2008 Management Studio 防止儲存需要資料表重建的變更

網站好像掛了!
簡單說的就是從上面的選單,工具\選項打開,
然後把下面紅色框框的地方打勾取消就可以了!



2011年6月6日 星期一

Linq 的語法參考

在某篇網誌上看到的,對Linq應該有幫助!


http://msdn.microsoft.com/en-us/vcsharp/aa336746


今天要參考的時候發現已經移到下面網址去了


101 LINQ Samples

2011年6月3日 星期五

DataTable 的各種查詢方式效能比較

由於 DataTable.Rows.Find 只提供對 PrimaryKey 的查詢能力,
如果不是 PrimaryKey 的話,
似乎只能用 DataTable.Select ,
說明文件裡面說"取得符合按照主索引鍵順序 (如果沒有,則使用加法順序) 的篩選準則的所有 DataRow 物件之陣列。",
看來如果查詢的欄位不是 PrimaryKey 的話就會用 Table scan 的方式去查資料;
上網找到一份資料 【使用 ADO.NET 的最佳經驗分享-更多有用秘訣】 ,
裡面的"在資料中找尋資料"這一段裡面提到, 
查詢的欄位是主索引鍵的話就用 DataTable.Rows.Find 不要用 DataTable.Select ,
非主索引鍵的話就建立 DataView 來增加多重查詢的效能;
然後我記得再查詢相關說明的時候,
微軟又建議我們用 Linq to DataSet 的方式來查詢!!!
也許年代不同有不同的方式可以得到更好的效能吧?
所以我決定把我所想得到的查詢方式通通拿來測試一下效能,
所以才會有今天這一篇文章。
我所想到的方法有下列幾項: