Windows Azure表,使用Contains查询

时间:2011-04-22 20:38:42

标签: c# linq azure azure-table-storage

我正在尝试为我的一个Azure表实现查询,查询应该检索包含输入字符串的所有文件。

我尝试过使用string.contains()但Azure不支持此功能,我也尝试过string.startswith(),但这也不受支持。

我想知道的是,如果有办法在Azure表中执行此操作。我将文件信息存储在表中,而分区键是存储项目的虚拟路径。

e.g。 Images_Jpg_Image1.jpg将是其中一个文件的分区键,我使用'_',因为Azure不允许在分区键中使用'/'。

我希望能够将上面的分区键与

进行比较

理想情况下,以下字符串将返回该分区键

Images_ Images_Jpg Jpg_ Image1.jpg

我已经设置了所有表格以及所有其他查询,这只是我无法弄清楚的这一个查询。

提前感谢您的帮助,

马特

3 个答案:

答案 0 :(得分:3)

Table Storage支持CompareTo方法,可以像StartsWith一样使用。但根据您尝试进行的搜索类型,它仍然可能对您不起作用。

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

答案 1 :(得分:2)

我遇到类似的问题,搜索Azure表搜索名称并确保结果不区分大小写。

我最终做的实际上是将我需要的数据从Azure表加载到内存集合中,该集合在可查询集合中持久存储。然后,我可以使用Linq to Objects查询并获得我想要的结果。

不是一种优雅的方法,但如果数据收集不是很大并且是相对静态的,那么内存中对象的大小相对于VM具有多少内存是相对温和的。性能也快得多。

您也可以尝试在内存中查找分区/行键和数据,运行查询,迭代分区和行键并返回结果。不确定这是否有助于解决您的问题,但我将其作为一种可能的方法抛弃。

祝你好运!

约翰

答案 2 :(得分:-1)

我发现使用LINQPad查询Azure表存储非常方便。查看Jason Halley's博客了解更多信息和示例。