2016-04-17 5 views
1

「配列」プロパティ(JSONのスピーチ)にオブジェクトが含まれているすべてのドキュメントを取得するにはMicrosoft Azure DocumentDBコレクションを照会したい与えられたフィルタ条件に一致する。プロパティ(オブジェクトの配列)に指定された条件を持つオブジェクトが含まれているDocumentDBの文書を見つける方法

これは私の文書である:

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 
     }   
    } 
} 

まず、私はいずれかを使用して、それを試してみました(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. 

"documentdb linq"のグーグルで私はこのブログ記事thisにつながっています。 素晴らしい!私は自分自身に言った問題はない!この記事では、LINQ演算子の数が配列(My BookEntries collection ?!)でサポートされていることがわかります。二度目の試み!

_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); 

それは動作します! OK、カウントはサポートされていますが、述語のない生のカウントのみがサポートされています。

次はどうすればいいですか? 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)); 

・ホープ、このことができます。

関連する問題