Я перемещаю некоторый код из традиционной рабочей роли в функцию 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
}