【问题标题】:Querying DocumentDB using a property other than Id使用 Id 以外的属性查询 DocumentDB
【发布时间】:2015-01-17 16:02:49
【问题描述】:

我想在我的 DocumentDB 数据库中查询我的文档。我想使用 LINQ 来处理 DocumentDB 查询,并想查询 facebookUsername 字段。

如果我使用下面的代码来查询标准 Id 字段,它可以正常工作,但是当我尝试使用 facebookUsername 字段时,我会收到一个编译错误

"'Microsoft.Azure.Documents.Document' 不包含定义 对于 'facebookUsername' 并且没有扩展方法 'facebookUsername' 接受类型的第一个参数 可以找到“Microsoft.Azure.Documents.Document”(您是否缺少 使用指令还是程序集引用?)”

这是我目前用于按 Id 查询的代码,它有效。我只是希望能够查询 facebookUsername 字段。

dynamic doc = (from f in client.CreateDocumentQuery(collection.DocumentsLink)
   where f.Id == myId.ToString()
   select f).AsEnumerable().FirstOrDefault();

如何修改我的代码以通过 facebookUsername 字段查询?

【问题讨论】:

  • 尝试更改它以返回IOrderedQueryable<dynamic>...from f in client.CreateDocumentQuery<dynamic>(collection.DocumentsLink)
  • 我以前从未使用过 IOrderedQueryable。您能否详细说明它是什么以及为什么它可以解决我的问题?我真的很感谢你的帮助。谢谢!
  • 我真正的意思是尝试将client.CreateDocumentQuery(collection.DocumentsLink) 更改为client.CreateDocumentQuery<dynamic>(collection.DocumentsLink)。没有它,您将处理不具有动态属性的 Documents 的可查询。
  • 我明白了。我将代码更改为: dynamic doc = (from f in client.CreateDocumentQuery(collection.DocumentsLink) where f.facebookUsername == myId.ToString() select f).AsEnumerable().FirstOrDefault();但我现在收到此错误:“表达式树可能不包含动态操作”
  • 在这种情况下,您是否有一个表示 doc db 集合中的项目的类(例如,包含facebookUsername 属性的类)?例如,如果你有一个名为User 的类,你应该可以使用client.CreateDocumentQuery<User>(collection.DocumentsLink)

标签: linq azure azure-cosmosdb


【解决方案1】:
var families = from f in client.CreateDocumentQuery<Family>(colSelfLink)
           where f.Address.City != "NY"
           select f;

会给你一个列表,其中 Family: { "Address" : {"City": "NY"} } }

如果你没有像 Family 这样的对象,在我的例子中,你就不能使用 Linq 来评估对动态对象的查询。然后您需要使用 SQL 查询语法。

var families = client.CreateDocumentQuery<Family>(colSelfLink. "SELECT * FROM c WHERE field=value").AsEnumnerable();

应该可以。

【讨论】:

  • 谢谢瑞恩。感谢您的帮助。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-01-22
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多