2013-09-06 4 views
0

Я использую Azure Table Storage и у меня есть записи, как это:Azure хранения таблицы запрашивая RowKey заданной длины

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», но это недопустимо.

У вас есть идеи?

EDIT:

Наконец я решил изменить структуру данных что-то вроде этого:

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. 

ответ

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 
       } 
+0

Ваш первый запрос для получения данных в порядке. Мне непонятно, почему вы извлекаете одни и те же данные во второй раз. –

+0

У меня есть два типа данных в хранилище: foo_0 bar_0 имеет тип «Type1» foo_0 bar_0_var_1 имеет тип «type2» (я буду править 1-й пост, чтобы уточнить, что). Поэтому я не могу извлечь обе записи из первого запроса. Итак, я решил извлечь только 1-й запрос из 1-го запроса, проверить, хорошо ли это длина, и если да, сделайте это снова из запроса с уверенностью в правильном типе. –

Смежные вопросы