Запрос Linq Cosmos DB для возврата «где-нибудь» на вложенные документы - PullRequest
0 голосов
/ 21 сентября 2018

Учитывая спецификацию документа Cosmos DB ...

{
  "Id": "123",
  "Name": "Customer",
  "Products": [
  {
      "Name": "ProdA"
  },
  {
      "Name": "ProdX"
  }],
}

Можно ли построить запрос ac # linq в формате from..select..where, который позволит нам найти всех клиентов с ProdX?

Обычный .Any() подход не поддерживается.

Я могу добиться того же, используя SelectMany() Where() Select(), но мне интересно посмотреть, можно ли этого достичь, используя специальноподход from..select..where.

Мы считаем, что этот формат чище, его легче читать и поддерживать.

Кажется, что вся официальная документация относится только к Products[0], который находит только клиентов сProdX как их первый продукт.Нам нужно найти клиентов с ProdX, где бы он ни находился в массиве.

Я бы ожидал выполнить этот запрос, используя что-то вроде этого:

 var customersWithProdX = 
     from customer in client.CreateDocumentQuery<Customer>(UriFactory.CreateDocumentCollectionUri("CustomersDb", "Customers"))
     from product in customer.Products
     where product.Name == "ProdX"
     select customer;

Но, к сожалению, я получаюследующее исключение:

Message "Incorrect number of arguments for method 'SelectMany'. Expected '2' but received '3'., documentdb-dotnet-sdk/2.0.0 Host/32-bit MicrosoftWindowsNT/6.2.9200.0"  
...