我想查询Microsoft Azure DocumentDB集合以获取所有"数组" property(在JSON语音中)包含一个与给定过滤条件匹配的对象。
这是我的文件:
public class CouponReadModel
{
public List<Models.BookEntry> BookEntries { get; set; }
// some other properties
public class Models
{
public class BookEntry
{
public Guid OrderId { get; set; }
// some other properties
}
}
}
首先我尝试使用ANY(在这种情况下TReadModel是CouponReadModel)
_documentClient
.CreateDocumentQuery<TReadModel>(_documentCollectionUri)
.Where(coupon => coupon.BookEntries.Any(be => be.OrderId == someOrderId));
我刚刚遇到以下异常:
Exception thrown: 'Microsoft.Azure.Documents.Linq.DocumentQueryException' in mscorlib.dll
Additional information: Method 'Any' is not supported.
Google搜索&#34; documentdb linq&#34;引导我访问此博文this。 大!没问题,我对自己说!帖子告诉我数组支持LINQ运算符计数(我的BookEntries集合?!)。第二次尝试!
_documentClient
.CreateDocumentQuery<TReadModel>(_documentCollectionUri)
.Where(coupon => coupon.BookEntries.Count(be => be.OrderId == someOrderId) > 0);
我有另一个例外:
Exception thrown: 'Microsoft.Azure.Documents.Linq.DocumentQueryException' in mscorlib.dll
Additional information: Method 'Count' is not supported.
不支持计数?再试一次:
_documentClient
.CreateDocumentQuery<TReadModel>(_documentCollectionUri)
.Where(coupon => coupon.BookEntries.Count() > 0);
有效!好的,支持count但只支持没有谓词的原始计数。
下一步该怎么做?任何人都可以告诉我如何查询DocumentDB以获得我想要的东西吗?
答案 0 :(得分:2)
我认为你要找的是这样的:
_documentClient
.CreateDocumentQuery<TReadModel>(_documentCollectionUri)
.Select(coupon => coupon)
.SelectMany(coupon => coupon.BookEntries
.Where(bookEntries => bookEntries.OrderId == someOrderId)
.Select(bookEntries => new
{
coupon = coupon
}));
这将返回一个匿名类型,它基本上是父文档(TReadModel),并将包含BookEntries数组。
如果您只查找与搜索条件匹配的任何BookEntry而不是包含BookEntry的父文档,请将查询更改为:
_documentClient
.CreateDocumentQuery<TReadModel>(_documentCollectionUri)
.SelectMany(coupon => coupon.BookEntries
.Where(bookEntries => bookEntries.OrderId == someOrderId)
.Select(bookEntries => bookEntries));
希望这会有所帮助。