C# Lambda表達式筆記

之前一直搞不清楚Lambda表達式的用法,現在抽空看了一下,感覺沒有那麼複雜…

簡單說就是:

args => expression

簡單取替整個Method,簡單常見有

沒有參數:() => …

一個參數:(x) => …

三個參數:(x,y,z) => …

通常會用短variable,因為lambda表達式本身就為簡潔而存在。(可老師教不要用abc做variable名啊,但lambda越簡越好)

lambda表達式預設會自動套用之前用的variable,例如:
var books = new bookshelf().Getbooks();
var cheapBooks = books.FinAll(b => b.Price < 100);

上述中b就預設是books,因為這一句明顯是在處理books,所以C#自動的將它定義為books.

通常Lamdba都會跟委托(Delegate) func<>及action<>一起使用。

 

 

 

SQL連線一直沒有釋放

之前一直用開C#連接SQL都沒有任何問題,今天用SQL語句還原數據庫時卻出錯提示數據庫被佔用中,用SQL Quary Analyzer查選

select * from master..sysprocesses where dbid=db_id('db')

顯示有多條狀態為[Sleeping]的連線,檢查了很久才發現問題所在,原來在connecting string


private const string DbConnString = "Data Source = {0};Initial Catalog = {1};Pooling=True;Min Pool Size=3;Max Pool Size=200;Connect Timeout = 30;Integrated Security = False;User ID=sa;Password=";

因為之前有大量查詢,為了節省資源使用了pooling,所以導致連線就算關閉了,都還在佔用中(在連線池),所以還原就會出錯,因為線池還在佔用資源未釋放,取消pooling就可以了。


private const string DbConnString = "Data Source = {0};Initial Catalog = {1};Pooling=False;Connect Timeout = 30;Integrated Security = False;User ID=sa;Password=";

ps.上述連線字串因為懶是寫在代碼的,實際使用時還是寫在xml較好