我正在使用.NET實體框架,並且我有一個包含varbinary的實體。是否有一種簡單的方法在代碼隱藏中獲取varbinary的大小,在從數據庫中檢索它之後?實體框架和VARBINARY
我在想,可能有一些方法可以直接從實體獲取大小,比如entity.Context.Size - 或者需要以不同的方式處理它?
我正在使用.NET實體框架,並且我有一個包含varbinary的實體。是否有一種簡單的方法在代碼隱藏中獲取varbinary的大小,在從數據庫中檢索它之後?實體框架和VARBINARY
我在想,可能有一些方法可以直接從實體獲取大小,比如entity.Context.Size - 或者需要以不同的方式處理它?
甲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();
我解決了它通過運行另一個查詢,獲取單元格的DATALENGTH()。不是最流暢的方式,但它的工作原理。
我仍然有興趣聽到,如果任何人都可以想出這個答案雖然。
我知道這個問題是舊的,但現在EF使用SqlFunctions.DataLength()
只要稍微擡起頭支持這一點,這並不裏面工作查詢(從EF 4.0開始)。它給出錯誤消息:LINQ to Entities不支持LINQ表達式節點類型'ArrayLength'。 – 2011-03-06 14:58:16
我不確定它是否可以在EF 1的查詢中工作。Marcus L.明確地詢問了如何從數據庫中獲取varbinary的大小,在這種情況下,上述工作正常。如果只需要大小,而不是二進制數據本身,我會建議將大小存儲在單獨的字段中,或者使用DATALENGTH函數運行單獨的查詢,就像Marcus最終做的那樣。在任何情況下,感謝頭擡起:) – bernhof 2011-03-09 17:32:51