Browse by Tags

在LINQ中實踐多條件LEFT JOIN
同事今天問了一個LINQ下使用多條件比對產生LEFT JOIN的問題,讓我也學到了新東西,特地PO文備忘。 這回不寫程式,直接用 威到不行的LINQPad 做示範。 假想的題目是有個員工資料表Employee,Primary Key是DeptId及UserId,除了UserName,另有SubstituteDeptId及SubstituteUserId指向該員工的代理人。公司共有三人,工程部的Jeffrey及Darkthread互為代理人,業務部的Mouth Cannon先生因火力強大,無人能代理...
Posted 12 August 2010 08:06 PMJeffrey | 6 comment(s) 63,463
Filed under:
關於DataContext Attach()的眉眉角角
上回提到 LINQ to SQL兩段式更新 時,經網友提醒有Attach()這個好東西,今天試了一下,結果發現它並不是我所原本想像的好東西,用起來得費一些手腳。 MVP Rick Strahl 對這個議題有兩篇文章( 1 , 2 )做了深入探討,因此細節我就不再贅述,但簡單歸納一下我的整理: Table(TEntity).Attach()有三個Overloading: 若只使用Attach(entity),不會產生任何SQL的更新動作。 使用Attach(entity, asModified),當設為true...
Posted 25 June 2010 02:47 PMJeffrey | 7 comment(s) 13,750
Filed under: , ,
CODE-LINQ to SQL兩段式更新
一般而言,我們使用LINQ to SQL更新資料時,程序為: 建立DataContext 透過from o in ... where ... select o 取出某筆資料物件(例如: m) 設定新值,例如: m.Property = newValue DataContext.SubmitChanges() 大功告成! 這裡有個假設前題是,全程中DataContext一直存在,以便掌握所有透過它取出的資料物件被更改的狀況。但有個情境是: 如果我將查詢到的資料物件傳遞到DataContext管不到的範圍...
Posted 11 June 2010 06:25 AMJeffrey | 6 comment(s) 18,436
Filed under: , ,
Deploy dotConnect for Oracle in ASP.NET Web Site Project
最近在測試devart dotConnect for Oracle的 LINQ to Oracle ,發現應用在ASP.NET Web Site Project時,必須要完成一些部署步驟才能順利在另一台伺服器運作。我整理如下: 部署DLL 有幾個選擇 : 1) 在伺服器上執行dotConnect for Oracle安裝程式,選擇Minimal安裝選項。 2) 手動從C:\Program Files\Devart\dotConnect\下將Devart.Data.dll, Devart.Data...
Posted 17 April 2010 11:27 AMJeffrey | 3 comment(s) 12,960
Filed under: ,
LINQ to SQL-在Where條件中使用getdate()
來個LINQ to SQL機車考題。 有一SQL資料表如下: 請問,若不用DataContext.ExecuteQuery(),有無可能使用LINQ語法轉換出如下的SQL指令? SELECT COUNT(*) FROM Member WHERE RegTime < GETDATE() AND REVERSE(UserName) = Code 我本來一直以為這種夾雜T-SQL函數的查詢條件,ExecuteQuery應是唯一解。今天查到一篇 神奇的文章 ,才知道原來透過FunctionAttribute宣告...
Posted 13 April 2010 05:23 PMJeffrey | 4 comment(s) 13,404
Filed under:
CODE-LINQ to SQL-讀取資料時略過部分欄位
依照資料庫的效能原則 -- 進行SELECT查詢時,應只選取必要欄位,選取欄位數愈少愈好。 以SELECT * FROM Attachment為例,假設資料有1萬筆,其中還有個Content欄位存放檔案的二進位內容,若平均檔案大小為1M,這個查詢動作將會引發10GB的磁碟機存取及網路傳輸量。如果我們的目的只不過想出一份檔案名稱及寫入日期的清單,那就千萬別這麼做,請以蒼生為念: SELECT FileName, CreatedDate FROM Attachment就成了! 在LINQ to SQL裡...
Posted 09 April 2010 06:00 AMJeffrey | 5 comment(s) 20,040
Filed under: ,
LINQ to SQL-當心CHAR(1)欄位比對條件寫法的效能差異
今天意外發現,LINQ to SQL在轉譯CHAR(1)欄位比對時,可能因寫法不同而產生極無效率的SQL指令! 當資料表的欄位為CHAR(1)時,在DataContext裡產生的 對應物件型別 是char,而我們直覺上可能寫成CharCol == 'A'的比對條件。但今天發現一件可怕的事... CharCol == 'A'的寫法會被轉換成極無效率的WHERE UNICODE(CharCol) = 65 對SQL查詢效能略有研究的人都知道,Func(SomeCol)...
Posted 25 March 2010 09:00 PMJeffrey | with no comments 10,200
Filed under: , ,
CODE-將LINQ查詢結果轉成ADO.NET DataTable
跟同事討論在新專案中開始採用LINQ,但有些古老元件的API只接受DataTable參數,我想到以前想過可以利用Reflection將LINQ查詢結果轉成DataTable,花了點時間,參考網路上的文章,整理成以下範例: using System; using System.Collections.Generic; using System.Linq; using System.Data; using System.Reflection; namespace ConsoleApplication1...
Posted 17 March 2010 11:11 AMJeffrey | 8 comment(s) 22,932
Filed under:
MEMO-使用LINQ to SQL直接執行SQL指令
使用LINQ to SQL時,難免會遇到基於簡潔效率考量需要直接下SQL指令的場合。依我的習慣,遇到這類情境我就不用LINQ寫法硬幹了。DataContext物件提供了ExecuteCommand及ExecuteQuery兩個方法,可以直接撰寫有效率的SQL語法,交給DB執行批次更新動作或取回複合式查詢的結果。 但切記!! 直接操控SQL語法並不代表用直接組裝SQL指令字串,這樣很容易產生 SQL Injection漏洞 。基於這條開發基本常識,ExecuteCommand當然也鼔勵大家用Parameter處理動態參數...
Posted 13 November 2009 08:11 PMJeffrey | with no comments 19,598
Filed under:
觀察LINQ to SQL DataContext的連線開啟時機
昨天的文章 發表後,有兩位網友提到了DataContext是否要加using的議題。 我接觸LINQ to SQL是由Scott Gu的 這幾篇文章 開始入門的,在他的範例中沒有特別提到using,我也自始就忽略DataContext有實做IDispose這件事。雖然用using包住絕對有益無害(只要小心using中間過程如將DataContext傳到外部,要留意using結束後外部就不可再繼續叫用),但我倒認為DataContext裡的Connection應該不是一new DataContext就建立一條連線不放...
小試LINQ to Oracle
上回針對Oracle使用LINQ做了 一番評估 ,打算為Oracle相關專案導入LINQ預做暖身。無意發現除了Entity Framework外,還有另外的選擇---devart的 LINQ to Oracle ! 基於工作專案常偏向RAD性質,對我來說,LINQ to Oracle的輕巧優於EF的龐大嚴謹功能完整。而LINQ to Oracle雖然也找得到免費解決方案,但畢竟要用在工作上,產品有廠商支援撐場,總是比Open Source多幾分穩當,何苦為了幫公司省錢砸了飯碗。 devart的產品看來符合我的需要...
Posted 18 October 2009 04:10 AMJeffrey | 10 comment(s) 29,990
Filed under: ,
Oracle LINQ之路
自從學會LINQ to SQL後,我就愛死那種忘記SqlConnection、丟掉SqlCommand、抛下SqlParameter的簡潔,乾乾淨淨 幾行Code 就搞定查詢、新增、修改、刪除的感覺。 無奈在公司,就算先撇開專案團隊成員是否已具備LINQ技能的問題,面對Oracle林立的工作專案環境,抬出LINQ to SQL無疑是張飛打岳飛,只能乖乖回去用OracleCommand、OracleParameter行禮如儀。 不過,我還是沒有放棄在Oracle專案使用LINQ的念頭。 ADO.NET...
Posted 11 October 2009 10:23 AMJeffrey | 9 comment(s) 21,883
Filed under: , ,
LINQ to SQL,說好的更新呢?
自從學會 LINQ to SQL一行資料庫更新法 ,它便成為我專案裡常用的技巧。對於彈性要求較高、嚴謹性要求較低的複雜資料,我還喜歡借重SQL 2005起新增的XML資料型別作為儲存欄位。透過 LINQ to SQL對應 ,Xml欄位會變成System.Xml.Linq.XElement Class,XElement在建立與操作上文件又比.NET 2.0時代XmlDocument、XmlElement的做法便捷許多。 例如: 我手上有一個簡單的XmlStore資料表。 CREATE TABLE ...
Posted 19 July 2009 06:00 PMJeffrey | 4 comment(s) 13,284
Filed under: ,
從LINQ to SQL的"一行更新法"聊起
我喜歡LINQ to SQL的簡潔,就拿更新資料庫某筆資料這件事來說,你可以忘記SqlConnection、丟掉SqlCommand、抛下SqlParameter,就搞定整個更新動作,對寫慣ADO.NET的人來說,實在是件不可思議的事。 像下面這個例子,寫一段LINQ配上Single()取得資料物件,重新指定值,然後SubmitChanges()就完成了ID=2 Player資料的CreateTime欄位更新。有種袖子都還沒捲起來,敵人就忽然自已暴斃的莫名爽快。 protected void Page_Load...
Posted 14 July 2009 02:58 AMJeffrey | with no comments 16,388
Filed under: ,
在ASP.NET中觀察LINQ to SQL所產生的T-SQL語法
接連在好幾個小專案裡用了LINQ to SQL,慢慢掌握要領, 煎、煮、炒、炸 查詢、新增、修改、刪除,各種 料理 操作都已能手到擒來,就愈發感受到它的便利性。 說穿了,LINQ to SQL只不過是ORM的一種具體實踐,並無深奧學問,之所以用來得心應手、讓人驚豔,不外乎是在與Visual Studio 2008整合深度上佔了優勢。以一個開發者的角度而言,我不在乎這對其他解決方案是否公允? 也不關心這類綁標圖利是否會有爭議? 給我方便的開發工具,其餘免談。 過去曾用ADO/ADO.NET開發過很長一段時間...
Posted 12 July 2009 05:33 PMJeffrey | 2 comment(s) 19,260
Filed under: , ,
更多文章 « 上一頁 - 下一頁 »

搜尋

Go

<September 2020>
SunMonTueWedThuFriSat
303112345
6789101112
13141516171819
20212223242526
27282930123
45678910
 
RSS
創用 CC 授權條款
【廣告】
twMVC
最新回應

Tags 分類檢視
關於作者

一個醉心技術又酷愛分享的Coding魔人,十年的IT職場生涯,寫過系統、管過專案, 也帶過團隊,最後還是無怨無悔地選擇了技術鑽研這條路,近年來則以做一個"有為的中年人"自許。

文章典藏
其他功能

這個部落格


Syndication