2017-11-30 19 views
3

私のWebアプリケーションでMongoDB C# driver 2.4.4を使用しています。私はそれらを動的にフィルタリングするコレクション内のドキュメントをグループ化する必要があります。MongoDBのグループ集計で動的にマッチ演算子を追加する

var query = collection.Aggregate() 
       .Match(y => y.IdLower.Contains(id)) 
       .Match(y => y.NameLower.Contains(name)) 
       .Group(
       key => key.Id, 
       g => new 
       { 
        Id = g.Key 
       }).ToList(); 

私は、ユーザー入力に基づいて、Match事業者を追加または削除する必要がありますが、私はどのように理解することはできません。

私はこのような何か試してみました:

var query = collection.Aggregate(); 

    if(!string.IsNullOrWhiteSpace(id)) 
     query = query.Match(y => y.IdLower.Contains(id)); 

    if (!string.IsNullOrWhiteSpace(name)) 
     query = query.Match(y => y.NameLower.Contains(name)); 

    query = query.Group(
     key => key.Id, 
     g => new 
     { 
      Id = g.Key 
     }).ToList(); 

を、私はこのような何かを達成するためにどのように構文エラーにCannot imlicitly convert type System.Collection.Generic.List<<anonymous type: string Id>> to '...

を取得しますか?

答えて

0

問題は(T1があなたのドキュメントタイプです)queryのタイプはIAggregateFluent<T1>であるということですが、(T2は匿名型です).Group()メソッドの戻り値の型はIAggregateFluent<T2>です。コンパイラはこれらの型を暗黙的に変換する方法を知らないため、エラーが発生します。

それはあなたがここでやろうとしているかに依存しますが、これを修正するための1つの可能な方法は、グループ式からT1(ドキュメントタイプ)のインスタンスを返すために、次のようになります。

query = query.Group(
    key => key.Id, 
    g => new T1 // replace "T1" with the actual name of your class 
    { 
     Id = g.Key 
    }).ToList(); 

別のオプションです新しい変数にgroup関数の結果を割り当てること:

var grouped = query.Group(
    key => key.Id, 
    g => new 
    { 
     Id = g.Key 
    }).ToList(); 

は、この情報がお役に立てば幸いです。

関連する問題