Операция AND с использованием TableQuery.CombineFilters в списке

Как я могу присвоить начальное значение myQuery, где я добавляю условия, используя AND и цикл foreach.

Я пытаюсь сделать следующее:

string myQuery = string.empty;

foreach (string myCondition in myConditionLists)
{
    myQuery = TableQuery.CombineFilters(
        myQuery,
    TableOperators.And,
    TableQuery.GenerateFilterCondition(nameof(MyClass.MyProperty), 
        QueryComparisons.NotEqual, myCondition));
}

Когда я отлаживаю, я вижу начальное утверждение "()", которое кажется неправильным. Другой подход заключается в назначении запроса первому элементу в myQuery и росте из второго элемента. Есть ли элегантный способ сделать это?

1 ответ

Решение

Вы можете указать целочисленное значение, и в вашем цикле он добавляет 1 для каждой итерации. Когда оно равно 1, вы устанавливаете начальное значение в строку myQuery.

Пример кода ниже:

        static void Main(string[] args)
        {
            CloudStorageAccount storageAccount = new CloudStorageAccount(new Microsoft.WindowsAzure.Storage.Auth.StorageCredentials("your_account", "your_key"),true);

            // Create the table client.
            CloudTableClient tableClient = storageAccount.CreateCloudTableClient();

            // Create the CloudTable object that represents the "people" table.
            CloudTable table = tableClient.GetTableReference("people");

            string myQuery = string.Empty;

            List<string> myConditionLists = new List<string>();
            myConditionLists.Add("Ben1");
            myConditionLists.Add("Ben2");
            myConditionLists.Add("Ben3");
            myConditionLists.Add("Ben4");
            myConditionLists.Add("Ben5");

            //specify an integer value
            int i = 0;

            foreach (string myCondition in myConditionLists)
            {
                i++;
                //if i == 1, specify the initial value to the myQuery string.
                if (i == 1) { myQuery = TableQuery.GenerateFilterCondition("RowKey", QueryComparisons.NotEqual, myCondition); }
                else
                {
                    myQuery = TableQuery.CombineFilters(
                        myQuery,
                        TableOperators.And,
                        TableQuery.GenerateFilterCondition("RowKey", QueryComparisons.NotEqual, myCondition)
                        );
                }
            }

            TableQuery<CustomerEntity> query = new TableQuery<CustomerEntity>().Where(myQuery);

            foreach (CustomerEntity entity in table.ExecuteQuery(query))
            {
                Console.WriteLine("{0}, {1}\t{2}\t{3}", entity.PartitionKey, entity.RowKey,
                    entity.Email, entity.PhoneNumber);
            }


            Console.WriteLine("---completed---");
            Console.ReadLine();
        }

Мой стол:

введите описание изображения здесь

Результат теста:

введите описание изображения здесь

Другие вопросы по тегам