2011-04-22 145 views
6

我想實現我的Azure的表之一的查詢,查詢應檢索包含輸入字符串的所有文件。Windows Azure的表,使用查詢包含

我使用string.contains()嘗試,但這種不支持Azure的,我也試着string.startswith(),這也並不支持。

什麼我不知道是如果有一種方法在Azure的表來做到這一點。我將文件信息存儲在表中,分區鍵是存儲項目的虛擬路徑。

例如Images_Jpg_Image1.jpg將是其中一個文件的分區鍵,因爲Azure不允許在分區鍵中使用'/',所以我使用'_'。

我希望能夠與

比較上述分區鍵理想情況下,以下字符串將返回分區鍵

Images_ Images_Jpg Jpg_ Image1.jpg

我有所有的表格和所有其他查詢,它只是這一個查詢,我無法弄清楚。

在此先感謝您的幫助,

馬特

回答

3

表存儲不支持CompareTo方法,它可以像StartSWith一樣使用。但是,根據您嘗試執行的搜索類型,它仍然可能無法幫助您。

MyTable.Where(t => t.PartitionKey.CompareTo("image") >= 0).ToList(); 
+0

這是關於你可以期望的最好的,但它不會找到Jpg_ Image1.jpg的情況。它也是區分大小寫的。它也不限於以「圖像」開頭的項目。如果您返回1000個結果,並且只有前300個圖片以圖片開頭,則會從表格中獲取下一個700個項目。 – knightpfhor 2011-04-25 21:34:38

+0

。在哪裏爲我拋出語法錯誤。我添加了linq命名空間。任何建議? – Kurkula 2016-04-27 03:48:14

2

我與對Azure的桌子上搜索名字,並確保結果是不變的情況下搜索遇到類似的問題。

我最終什麼事做實際上是加載在內存中的集合,獲取可查詢的集合堅持我需要從Azure的表到的數據。然後我可以使用Linq來查詢對象並獲得我想要的結果。

不是一個優雅的方法,但如果數據收集是不是巨大的,是relativley靜態的,內存中的對象的大小會同情給虛擬機的內存具有相對良性的。性能也快得多。

您也可以嘗試,只是有分區/行鍵和數據你試圖在內存中進行查詢,運行查詢,迭代partiation和行鍵和返回結果。不知道這是否有助於解決您的問題,但我把它作爲一種可能的方法予以解決。

祝你好運!

約翰

+0

感謝您的迴應約翰,我會看看這個。我很想切換到Azure SQL,儘管 – Midimatt 2011-04-22 21:11:27

+0

我明白:)對我們來說,使用Azure表存儲VS SQL要便宜得多。每種情況都不同,blah,blah,blah :) – 2011-04-22 21:14:34

+0

值得注意的是,如果執行查詢的代碼是Azure區域的本地代碼(即,您已經編寫了一個在Azure中運行的服務,「在您的存儲帳戶旁邊」),那麼性能應該沒問題,並且您不會爲數據傳輸付費(「出口」費用,前提是它位於相同的Azure區域中)。如果您的應用程序體系結構適合該模型,這使得這個答案很好。 – 2016-05-03 21:37:44