【问题标题】:LINQ Query Issue with using Any on DocumentDB for child collection在 DocumentDB 上使用 Any 进行子集合的 LINQ 查询问题
【发布时间】:2016-08-11 14:01:16
【问题描述】:

使用 v1.8 .Net SDK

尝试返回销售,其中销售客户数组包含我正在寻找的客户 ID。

Sales.Where(sale => sale.Clients.Any(c => c.ClientId == clientID));

返回错误 “可为空的对象必须有一个值。”

在 System.Threading.Tasks.Task.ThrowIfExceptional(Boolean includeTaskCanceledExceptions) 在 System.Threading.Tasks.Task1.GetResultCore(Boolean waitCompletionNotification) at System.Threading.Tasks.Task1.get_Result() 在 Microsoft.Azure.Documents.Linq.DocumentQuery1.GetEnumerator() at System.Collections.Generic.List1..ctor(IEnumerable1 collection) at System.Linq.Enumerable.ToList[TSource](IEnumerable1 源)

ClientID 是一个 GUID,但尝试查询客户端对象上的任何属性都会返回相同的错误。

如果我对相同的数据运行相同的查询,但只使用 List 集合(即不使用 DocumentDB),那么一切都很好。

任何建议表示赞赏。 谢谢

【问题讨论】:

标签: azure-cosmosdb


【解决方案1】:

这个查询也可以使用 SelectMany + Where 来表达:

Sales.SelectMany(s => s.Clients.Where(c => c.ClientID == clientID).Select(c => s));  

【讨论】:

  • 只是出于好奇,你会如何在文档数据库的 sql 语法中写出这样的东西?
  • 非常相似,因为 DocumentDB SQL 和 LINQ 都在对象上工作:SELECT sale FROM sale JOIN client IN sale.clients WHERE client.clientId = "c"
  • 优秀,伟大的工作。我以前从未考虑过 c => s 来回到“外部”实体。谢谢。
  • 这可以使用 from..select..where Linq 语法吗?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2010-10-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-01-08
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多