好奇LINQ To SQL如何將SQL Data Type對應成.NET Data Type,我做了一個小實驗: 建了一個有18種不同資料型別的Data Table,把它拉進dbml中,看看LINQ to SQL對應出來的資料型別為何?

以下是整理出來的結果:

SQL Data TypeLinq to SQL .NET Data Type
tinyintSystem.Nullable<byte>
smallintSystem.Nullable<short>
intSystem.Nullable<int>
bigintSystem.Nullable<long>
floatSystem.Nullable<double>
realSystem.Nullable<float>
smallmoneySystem.Nullable<decimal>
moneySystem.Nullable<decimal>
numeric(6, 2)System.Nullable<decimal>
numeric(12, 2)System.Nullable<decimal>
numeric(18, 2)System.Nullable<decimal>
xmlSystem.Xml.Linq.XElement
imageSystem.Data.Linq.Binary
binary, varbinarySystem.Data.Linq.Binary
bitSystem.Nullable<bool>
datetimeSystem.Nullable<system.datetime>
timestampSystem.Data.Linq.Binary
uniqueidentifierSystem.Nullable<system.guid>
varchar, char, nvarchar, nchar, text, ntextSystem.String
char(1), nchar(1)System.Char

之前見識過ODP.NET會依不同數字欄位長度切換Single、Double或Decimal。在LINQ to SQL中也有類似的彈性做法,tinyint, smallint, int, bigint分別變成byte, short, int及long,但是smallmoney, money, numeric則一律轉成decimal。我喜歡這個設計方式,如此將不至於產生上次遇到的ODP.NET數字誤差。

SQL xml Data Type會變成System.Xml.Linq.XElement, image, binary, varbinary會變成System.Data.Linq.Binary,而timestamp則對應成System.Data.Linq.Binary。

最後提醒一下,除了Linq.Binary, Linq.XElement及String外,若資料庫欄位允許NULL時,則LINQ to SQL會把它轉成Nullable<T>,讓我們可以用null來對應到資料庫的NULL,十分直覺化。

愈用愈覺得LINQ to SQL是個好東西呀!!


Comments

# by mOMo

哇,這個表格真是不錯!很好的參考資料。 在這裡學到不少知識。^^

Post a comment