2016-07-21 13 views
0

に対するRavenDBインデックスの照会:私は、次のRavenDBインデックス持つ外部リスト<T>

public class RidesByPostcode : AbstractIndexCreationTask<Ride, RidesByPostcode.IndexEntry> 
{ 
    public class IndexEntry 
    { 
     public string PostcodeFrom { get; set; } 
     public string PostcodeTo { get; set; } 
    } 

    public RidesByPostcode() 
    { 
     Map = rides => from doc in rides 
         select new 
         { 
          doc.DistanceResult.PostcodeFrom, 
          doc.DistanceResult.PostcodeTo 
         }; 

     StoreAllFields(FieldStorage.Yes); 
    } 
} 

を私も郵便番号を表す文字列のリストを持っている、と私はPostcodeFromが中であるすべての乗り物を取得したいです郵便番号のリスト:

var postcodes = new List<string> { "postcode 1", "postcode 2" }; 

var rides = _database.Query<RidesByPostcode.IndexEntry, RidesByPostcode>() 
      .Where(x => postcodes.Contains(x.PostcodeFrom)) 
      .OfType<Ride>() 
      .ToList(); 

しかし、もちろんRavenDbは、それが.Contains表現を理解することはできませんと言います。

where句の前に.ToList()を呼び出すことなく、RavenDbでどのようにこのようなクエリを実行できますか?

答えて

1

私は答えを見つけました:RavenDbの.In()拡張メソッド(ドキュメントの "Where + In"セクションを参照)。

どうやら私は内側から外に外部から考えて、代わりにされた:)

これは、最終的なクエリです:

var rides = _database.Query<RidesByPostcode.IndexEntry, RidesByPostcode>() 
      .Where(x => !x.IsAccepted && x.PostcodeFrom.In(postcodes)) 
      .OfType<Ride>() 
      .ToList(); 
関連する問題