Azure表存储查询指定长度的rowkey

时间:2013-09-06 13:06:19

标签: azure key row storage

我正在使用Azure存储表,我有这样的条目:

PK      RK            TypeOfSerializedObject
foo_0   bar_0         type1
foo_0   bar_0_var_1   type2

有没有解决方案来检索第一行(bar_0)而没有另一行(bar_0_var_1)? (在我的情况下,这两行存储了不同类型的序列化对象,我无法检索它们。)

我正在尝试做这样的事情:

            IQueryable<type1> type1ent = from t in context.CreateQuery<type1>(tableName)
                                         where t.PartitionKey == String.Format("foo_{0:0}", arg1)
                                         && t.RowKey.CompareTo("bar_0") >= 0
                                         && t.RowKey.CompareTo("bar_9") <= 0
                                         select t;

我需要包含一些查询选项,如“t.RowKey.Length == 5”,但它无效。

你有什么想法吗?

编辑:

最后,我决定将数据结构更改为:

PK      RK            TypeOfSerializedObject
foo_0   bar_0         type1
foo_0   var_1         type2
foo_0   var_2         type3
foo_0   var_3         type4
foo_0   var_4         type5
etc.

1 个答案:

答案 0 :(得分:0)

我已经做到了(效率不高),但我仍然在寻找性能更佳的解决方案

            IQueryable<string> type1ent = from t in context.CreateQuery<type1>(tableName)
                                                            where t.PartitionKey == String.Format("foo_{0:0}", arg1)
                                                            && t.RowKey.CompareTo("bar_0") > 0
                                                            && t.RowKey.CompareTo("bar_:") < 0
                                                            select new String(t.RowKey.ToArray());

             foreach(string rowKey in type1ent)
                if (rowKey.Length == "bar_0".Length)
                {
                    type1Entity = (from t in context.CreateQuery<type1>(tableName)
                                   where t.PartitionKey == String.Format("foo_{0:0}", arg1)
                                   && t.RowKey.CompareTo(rowKey) == 0
                                   select t).FirstOrDefault();

                    TYPE type = // deserialization of type1Entity.SerializedObject
                }