根据外部列表查询RavenDB索引<;T>;

本文关键字:lt gt 索引 RavenDB 外部 列表 查询 | 更新日期: 2023-09-27 17:58:05

我有以下RavenDB索引:

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在邮政编码列表中的所有Rides:

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的表达。

如何在RavenDb中实现这样的查询,而不必在where子句之前调用.ToList()

根据外部列表查询RavenDB索引<;T>;

好的,我找到了答案:RavenDb的.In()扩展方法(请参阅文档的"Where+In"部分)。

显然,我是从外向内思考,而不是从内而外思考:)

这是最后一个查询:

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