#c# #azure #azure-table-storage
#c# #azure #azure-table-storage
Вопрос:
Я изо всех сил стараюсь упростить операцию запроса, просто запрашивая первую запись таблицы, чтобы проверить, является ли мой запрос действительным и не вызывает исключений.
Я видел много ответов на SO о получении верхних ‘n’ объектов. Мое требование здесь заключается в том, чтобы применить операцию запроса только к первому объекту, независимо от того, соответствует ли это фильтрам, указанным в запросе и прерывании.
Я пытался:
TableQuery query = new TableQuery().Where("MyKey eq 'RawMaterial'").Take(1);
Но этот запрос выполняет полное сканирование таблицы, если нет подходящего объекта. Есть комментарии по этому поводу?
Комментарии:
1. Если вы ищете один, вам нужно просмотреть ВСЕ, если совпадений нет.
2. Вот в чем на самом деле заключается вопрос. Требование таково: «Выберите первый объект, извлеките, если он совпадает, иначе прервите!»
3. Запись в библиотеку будет прервана при достижении номера, а не при поиске по всему списку.
4. можете ли вы записать пример?
Ответ №1:
Вот пример кода :
List<int> numbers = Enumerable.Range(0, 100000000).Select(x => x).ToList();
DateTime startAll = DateTime.Now;
List<int> none = numbers.Where(x => x == -1).Take(1).ToList();
DateTime endAll = DateTime.Now;
DateTime startOne = DateTime.Now;
List<int> one = numbers.Where(x => x == 1).Take(1).ToList();
DateTime endOne = DateTime.Now;
Console.WriteLine("Time One : {0}, Time All {1}", endOne.Subtract(startOne).ToString(), endAll.Subtract(startAll).ToString());
Console.ReadLine();
Комментарии:
1. Спасибо за ваш ответ. Мой вопрос не о списке. Речь идет о получении только первого объекта из хранилища таблиц Azure.
2. Что делает код, так это сравнивает время прохождения всего списка с чтением только одного значения. Если вы используете First(), всегда есть перечислимый список. Ваша таблица представляет собой перечислимый список.