Запрос LINQ не выполняется, когда я запускаю его из функции Azure, но не из консольного приложения - PullRequest
0 голосов
/ 04 мая 2018

Я перемещаю некоторый код из традиционной рабочей роли в функцию Azure. Я нашел строку кода, которая возвращает результат, когда я вызываю его из консольного приложения, но ноль, когда я вызываю его из функции.

Теперь для примера кода. Я написал класс _resultProvider, который в основном запрашивает базовую базу данных CosmosDB - в базовом классе он создает запрос IOrderedQueryable и фильтрует его на основе предиката, который вы передаете в качестве параметра. Первая строка кода возвращает результат, только когда я вызываю его из консольного приложения, и ноль, если я вызываю его из функции Azure. Вторая строка возвращает результат с любой платформы.

Получает результат при вызове из рабочей роли, но ноль при вызове из функции:

var res1 = _resultProvider.GetSpecialAsync(o => id == o.Id).Result.FirstOrDefault();

Получает результат из рабочей роли или функции:

var res2 = _resultProvider.GetSpecialAsync(o => 1 == 1).Result.Where(o=>id==o.Id).FirstOrDefault();

Я предполагаю, что это какая-то проблема LINQ, потому что передача предиката не похоже на работу функции, но она работает, если я просто получаю все результаты и запрашиваю этот набор результатов.

Вот код GetSpecialAsync:

public async Task<IEnumerable<T>> GetItemsSpecialAsync(Expression<Func<T, bool>> predicate)
{
    IDocumentQuery<T> query = client.CreateDocumentQuery<T>(
            UriFactory.CreateDocumentCollectionUri(DatabaseId, CollectionId),
            new FeedOptions { MaxItemCount = -1, EnableCrossPartitionQuery = true})
        .Where(predicate)
        .AsDocumentQuery();

    List<T> results = new List<T>();
    while (query.HasMoreResults)
    {
        results.AddRange(await query.ExecuteNextAsync<T>());
    }

    return results;
}

Вот тип, который я пытаюсь вернуть, ResultDocVm:

public class ResultDocVm : DocViewModelBase
{
    public string Name { get; set; }
    public long AccountId { get; set; }
    // ... insert more junk here with getters and setters
}

Вот DocViewModelBase:

public abstract class DocViewModelBase
{
    [JsonProperty(PropertyName = "id")]
    public string Id { get; set; }

    public DateTime? CreatedAt { get; set; }
    //... even more junk here
}

1 Ответ

0 голосов
/ 04 мая 2018

Таким образом, после всего этого все выглядит так, как будто консольное приложение учитывает атрибут JsonProperty, а функция Azure - нет.

Генерирует запрос, который не даст результатов, потому что свойство Id будет в верхнем и нижнем регистре, т.е. id.

Звучит как ошибка с функцией Azure на уровне Azure, а не с вашим кодом как таковым.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...