發表文章

在EF中執行SQL查詢 (Execute Raw SQL Queries in Entity Framework)

EF(Entity Framework)是微軟提供的佛心ORM工具,讓菜鳥開發人員得以在操作後端資料庫時,可以在Visual Studio中以物件的方式選擇資料庫內的表格與欄位,減少手動組合SQL指令發生的錯誤。但若資料庫因正規劃切割成數十個表格,或者主索引鍵規劃不良、有許多子查詢時,檢查EF組合出的SQL語法,其時間成本可能遠遠超過原來所預期。 遇到這種情形,筆者可能會選擇設計View、資料表函數或者預存程序,在EF內加入此物件。但要記得回傳的查詢結果必須要有Key值。 另一種情形是開發者無法(或沒有權限)在DB上新增物件。可能的方案是直接在EF下 SQL語法。從舊有的程式翻修時,會遇到有複雜join的情形,靠EF Mapping可能會有錯。這時候可以手動帶參數進去。 using ( var ctx = new SchoolDBEntities ()) { var student = ctx.Students .SqlQuery( "Select * from Students where StudentId=@id" , new SqlParameter("@id", 1)) .FirstOrDefault(); } 但這樣的sql如果選取的欄位名稱與EF內的物件名稱衝突,還是會產生Exception。

The English Patient

記得學生時代在電視上看過電影「英倫情人」(The English Patient)的電視廣告,當中艾莫西與嘉芙琳翩翩起舞的情景,令人至今難忘(現在是2019,23個年頭過去了),那段配樂尤其迷人。 後來買了得利影視的正版VCD,也買了蓋布瑞·雅德作曲的原版原聲帶,但很奇怪,就是找不到跟當初電影預告片段裡的那段配樂。 後來電影看得多了,猛然發現,那時候的很多電影,似乎廣告曲跟片子本身的配樂,根本不是同一首! 是後製趕工不及,還是甚麼原因,就不得而知了。 現在有YouTube 跟Google可查,拜讀國外網友留言之後,總算解開心中迷惑。 英倫情人的這段廣告配樂,來自Randall Meyers(1955-) 為1993年挪威電影 Telegrafisten (電報員)創作的 Love Theme Rolandsen and Elisa 。電報員這部片由挪威作家 Knut Hamsun( 克努特·漢森)的作品 Dreamers (Sværmere) 改編而來,雖然入圍過奧斯卡最佳外語片,但鎩羽而歸。 以世俗的角度來看,影響力遠不如後來的英倫情人。 英倫情人配樂作曲者蓋布瑞·雅德所做的曲子,融合了匈牙利民謠與北非的意象,還有巴哈的郭爾堡變奏曲,與劇情緊密鑲嵌,但用現在的話來說,劇透可能太強烈了些。發行商Miramax不知為何,改選一首中規中矩代打的主題曲。這首代打跟英倫情人裡第三首配樂的前幾小節很相似,後面則屬於中規中矩,有些巴洛克音樂的色彩,卻陰錯陽差的留在不少觀影人的記憶中,成為一場美麗的誤會。 Randall Meyers的名字也因此跟這部影史不朽的鉅作(得了快九項奧斯卡啊),奇妙的連結在一起。 當年冷調沉默的考古學家,在營火晚會凝視著述說希羅多德《歷史》的知性女子─卻未體認到不可踰越的邊界之存在。英倫情人的演員們後來在2016年的羅馬電影節重新合體[ 連結 ]。即使要角的容貌隨歲月轉變,神采彷彿還說著故事。「且就虛無醒世夢,返於曲折復人情」。回想電影與現實的虛實重合,多少是感觸? 多少是投射? 比例只有觀影者,本身能夠衡量。

SQL Pivot 範例

在SQL 2008以後的MSSQL中,PIVOT函數可將指定資料庫欄位的值產生分類小計後橫向展開,達到交叉表的效果。 舉例而言有個資料表叫做PLAN,裡面有兩個欄位 SCHOOL_NO,ACTION_CODE記載學校代碼與學校申請的項目。 若我們要知道每間學校每個申請項目的筆數,直覺會用 group by去小計, 但這樣查出來的結果還是一列一列的,並不會橫向展開。 select SCHOOL_NO,ACTION_CODE, count(*) group by SCHOOL_NO,ACTION_CODE 清大 1 3 清大 2 2 清大 3 11 政大 3 3 可是一般正常人習慣看的,是將結果列出來的情形,比較清楚易懂。 1 2 3 清大 3 2 11 政大 0 0 3 筆者是從SQL2000開始學習的,以前必須先將結果 用case when ACTION_CODE = '2' then count else 0 的方式, 將每一個可能的結果擺到橫軸顯示。 但在SQL 2005以後提供了pivot函數,就不需要這樣做(仍須看貴司DBA設定DB的相容等級>=90才能使用)。 以下面的範例,查詢區塊t先過濾出要彙整計算的資料集, 第一個欄位通常是學校或部門代碼 區塊p 則是告訴SQL 要用哪一個欄位計算小計 先輸入是要計算筆數或是加總 for 語法則讓您輸入要列出統計的欄位值,如果想看ACTION_CODE的值是1,2,3的 要寫成 [1],[2],[3]而不是一般 SQL 用兩個單引號包起來的樣式。 如果要顯示的是每月的薪資小計,就會是[1],[2]....一直列到12去了。 SELECT c.SCHOOL_NAME, p.* FROM ( select SCHOOL_NO,ACTION_CODE from PLAN where PLAN_ID like'%1A%' --and STATUS in ('0','1','2') ) as t PIVOT ( count(ACTION_CODE) FOR ACTION_CODE IN ([2],[21]...

窮查理的普通常識(增訂版)精華 poor Charlie's ALMANACK

《窮查理的普通常識》是巴菲特的投資夥伴─李察‧蒙格的作品,問世多年了。原文書名的ALMANACK是一個古字,原意有點像農民的農民曆,後來引申為年鑑或老生常談。翻譯者翻成普通常識似乎略微遜色,也許對台灣的讀者而言,稱作碎碎念更為適切。 本書分為譯者的評述,以及蒙格本人的演講集。摘錄本人覺得不錯的重點如次: 遠離毒品、嫉妒;避免做事反覆無常、避免不借鑑前人的經驗。不要意志消沉。重視風險管理(我只想知道我會死在甚麼地方,這樣我就可以永遠不去那裏。) 永遠反向思考。 學會有承擔、可靠。作者認為麥當勞平凡但值得尊敬,她為數百萬少年提供第一份工作,讓青少年學會承擔工作的責任。 ─第一講 投資之前要學習數學、會計學、統計學、心理學的一些基本觀念,用比較寬廣的思想體系看待投資。 規模經濟降低成本開銷,龐大的曝光率帶來資訊優勢與社會認同。但規模太大也有缺點,不夠專業。廣泛性報導的雜誌,營收可能輸給有專業需求的專門雜誌。 縮小規模、加強專業化程度,能夠帶來巨大的優勢。 組織太大變成官僚化、分工變成偷懶的藉口。官僚作風搞倒西屋電器。 對於鄉村雜貨店被量販店打敗,不要有懷舊情懷與幻覺。 要考慮規模與經營熱情加在一起時產生的威力,精簡、刻薄、效率會打敗企業競爭對手的官僚風氣。 某些行業會爆發割喉戰,大者恆大;某些行業則人人賺錢,擠掉別人並不經濟。 導入新技術不只要考慮降低當下成本,也要考慮幾年後的實質報酬。 破壞性創新對行業可能是競爭性毀滅。 股票投資要考慮自身理解能力的能力圈。 贏家謹慎出手。 投資顧問要績效,總是逼你交易她才有收入。可是現在是時機點嗎? 不要迷信換股操作 如何提升效率?→不以時數計算,以件或班次算,做完就回家。 投資有偉大領導者的優質企業,靠他們幫自己賺錢。然後長期持有。 ─第二講 掌握學科的理論模型 查檢表的威力 跨領域 善用不同學科知識來解決問題 軟科學要模仿硬科學實事求是的鑽研精神,在學科精華的訓練要更嚴格,針對某些學科的基本原理必須熟記,以此去思考事物,若有衝突時要進行辯證。對於困難的東西不能逃避,學習者不論喜歡與否都必須熟練。 ─第五講 投資者賺得財富,但秉持良知參與社會,幫那些信任自己的人掙錢。

強制降低pdf 檔大小 (reduce PDF file size 2019)

圖片
工作上有個需求,是讓眾多的客戶將pdf上傳到指定的平臺。由於平臺使用租賃的虛擬機器,若不限制上傳大小,會造成web server很大的壓力,也造成日後備份的困擾。偏偏客戶上傳的有四、五百頁的pdf,單一檔案超過110MB,不禁讓人好奇,內容大都是文字與表格的pdf檔,大小為什麼會這麼驚人? 服務單位有授權專業版的 Acrobat,當中內建最佳化與縮減大小功能。可惜跑了很久,沒有甚麼效果。以坊間很多線上的pdf壓縮服務而言,大多是將圖層平面化、取消內嵌字型,或是將內嵌的圖檔降低品質後,另外寫入一個新的pdf檔。可是,他們都沒有用! 仔細想想客戶的需求,只是要將電子檔案上傳備查。文字內容是否可再編輯或選取,並不是重點。因此最後想出一個偏激的方法:把圖檔全部變成 黑白點陣圖格式(binary image, B&W )的 tiff檔,再變回pdf。這樣每一頁的大小從接近200K變成只有20k,頁面內的空白頁甚至變成0K。雖然看來是爛方法,但至少也是個解決問題的方法 >.< ※這樣會將每個頁面轉為黑白點陣圖,仍然可列印,但無法再選取文字內容或搜尋。類似將文件用事務機掃描的原理。 ※只適用於錄案備查、檔案內容不再編輯的場合。 (1) 建好一個空資料夾,用來裝轉換後資料 (2)利用Acrobat專業版,點選 檔案→轉存至 →影像→TIF   (3)選擇步驟(1)的建好的資料夾,注意存檔類型是 TIFF   (4)在同一畫面,點選對話方塊下方的「設定」   (5)當中有三個選項,最底下的 色域 點單色, 解析度 選 118.11像素,要再降低檔案大小,可選59.06像素。  (7)前述的轉換完成後,再點選Acrobat專業版的 檔案→建立→合併檔案為一個PDF   (8) 點選「新增檔案」,選擇步驟 (6) 所看到的所有檔案。請注意檔案名稱的順序。   (9)點下右上方的「合併」,頁面會一格一格反灰,直到都執行完為止。最後一個步驟請將合併完的檔案另存到您要的地方。  (10)檢查檔案內容正確性。...

包生男?

豐臣秀吉自1586年開始「九州征伐」,過程中讓黑田孝高處理了已經歸順的城井鎮房,城井一家遭到謀殺。城井家在大友、島津、豐臣家之間游移,並不是甚麼稀奇的事,黑田父子的做法未免過分,據說他倆為此見到城井鎮房的幽魂,感到畏懼不安。這也是人情之常。 奇怪的是據說秀吉也對城井鎮房被害感到有點後悔,這就滿奇怪的。早年文化水平趨近於零的木下藤吉郎、羽柴筑前守,雖稱不上殺人如麻,但也沒有在少的,難道是真的對古老秘傳的弓術(艾蓬の射法)有興趣嗎? 後來想起平家物語的一段,不禁啞然失笑。 平清盛的女兒建禮門院得子貴為中宮,產下安德天皇,取禮記之義:國君世子生時,占卜結果為吉,射人以桑弧蓬矢六,射天地四方,才可以餵小寶貝吃飯飯。 禮記正義把桑弧蓬矢解讀成象徵男子要有經略四方的遠大之志是很重要的,「必先有志於其所有事,然後敢用穀也。」 這規矩從遙遠的唐土傳到高麗、日本,又從平安時代一直到十六世紀,儒家色彩的意義淡薄了,儀式性的成分變多了,幾經流傳至民間,或許巫術的色彩更濃厚了一些。城井家是鎌倉時代就延續下來的氏族,累積一些「文化資產」,引以自豪,城井鎮房還曾得意洋洋地去教幕府將軍足利義稙艾蓬是在射甚麼碗糕,帥! 後來意氣風發的秀吉大人所求皆得,滅掉一個見風轉舵的城井家,老實說也不怕九州的情勢有所變化。先要城井家把家寶小倉色紙跟領地交出來,當然是政治上的借題發揮。 但他的軟肋是愛面子,又膝下猶虛。 殺了人才後悔,大概是因為他從哪裡聽來桑弧蓬矢的片段,把「生男子」的儀式搞成「包生男」的祕法, 才會對一個九州小大名斷送性命,感到微微的惋惜吧。 再認真想想,他沒學到這個秘傳,也許是件好事 ──幾百年前,年幼的安德天皇因為平家戰敗了,被外祖母二位尼抱著,投入萬里波濤。雍容華貴的婦人,指著大海,告訴小男孩萬里之下也有帝都時,會不會想起那眾人擁簇、「射天地四方」的一刻? 國君世子生,告於君,接以大牢,宰掌具。三日,卜士負之,吉者宿齊朝服寢門外,詩負之,射人以桑弧蓬矢六。射天地四方,保受乃負之,宰醴負子,賜之束帛,卜士之妻、大夫之妾,使食子。

c# 列出所有類別中的屬性 ( Iterate through all class fields in C#)

I have  one  example  class like this: public class Foo{  public string Idno { get; set; }  public string Phone{ get; set; } public string Department{ get; set; } }  In order to bind database's  columns like EF,  I would like to iterate through these fields  dynamically ,  using System.Reflection;     Foo  foo = new  Foo ();             foo. Idno  = "a12345678";             foo. Department  = "IT";             foreach (PropertyInfo prop in typeof( Foo ).GetProperties())             {                 Response.Write(prop.Name + ";" + prop.GetValue(foo, null));             }