2011-04-22 102 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