2016-07-21 34 views
0

Ich habe folgendes RavenDB Index:Abfragen eines RavenDB Index gegenüber einer externen Liste <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); 
    } 
} 

I darstellt Postleitzahlen auch eine Liste von Strings haben, und ich möchte die Fahrten alle, für die bekommen die PostcodeFrom ist in die Liste der Postleitzahlen:

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

Aber natürlich RavenDB sagt es die .Contains Ausdruck nicht verstehen kann.

Wie kann ich eine solche Abfrage in RavenDb erreichen, ohne .ToList() vor der where Klausel aufrufen zu müssen?

Antwort

1

Ok, ich habe die Antwort gefunden: RavenDb's .In() Extension-Methode (siehe den "Where + In" Abschnitt der Dokumentation).

Offenbar in Ich war von außen zu denken, statt von innen heraus :)

Dies ist die letzte Abfrage:

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