Учитывая спецификацию документа 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"