2009-03-03 97 views
6

我正在使用.NET實體框架,並且我有一個包含varbinary的實體。是否有一種簡單的方法在代碼隱藏中獲取varbinary的大小,在從數據庫中檢索它之後?實體框架和VARBINARY

我在想,可能有一些方法可以直接從實體獲取大小,比如entity.Context.Size - 或者需要以不同的方式處理它?

回答

17

甲VARBINARY轉換爲在實體框架的一個字節[]字段,這意味着可以檢查陣列的長度屬性:

int fieldSize = entity.MyVarBinaryField.Length; 

正如tster提到:在LINQ實體查詢,則可以調用SqlFunctions類的DataLength方法,這將在生成的SQL語句中轉換爲DATALENGTH函數調用。這僅適用於SQL服務器和Entity Framework 4或更高版本:

int? fieldSize = repository.Entity 
    .Select(e => SqlFunctions.DataLength(e.MyVarBinaryField)).Single(); 
+1

只要稍微擡起頭支持這一點,這並不裏面工作查詢(從EF 4.0開始)。它給出錯誤消息:LINQ to Entities不支持LINQ表達式節點類型'ArrayLength'。 – 2011-03-06 14:58:16

+0

我不確定它是否可以在EF 1的查詢中工作。Marcus L.明確地詢問了如何從數據庫中獲取varbinary的大小,在這種情況下,上述工作正常。如果只需要大小,而不是二進制數據本身,我會建議將大小存儲在單獨的字段中,或者使用DATALENGTH函數運行單獨的查詢,就像Marcus最終做的那樣。在任何情況下,感謝頭擡起:) – bernhof 2011-03-09 17:32:51

0

我解決了它通過運行另一個查詢,獲取單元格的DATALENGTH()。不是最流暢的方式,但它的工作原理。

我仍然有興趣聽到,如果任何人都可以想出這個答案雖然。

9

我知道這個問題是舊的,但現在EF使用SqlFunctions.DataLength()