【问题标题】:Querying a RavenDB index against an external List<T>针对外部 List<T> 查询 RavenDB 索引
【发布时间】:2016-07-21 09:54:39
【问题描述】:

我有以下 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 位于邮政编码列表中的游乐设施:

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

【问题讨论】:

    标签: c# indexing ravendb


    【解决方案1】:

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

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

    这是最终的查询:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-05-21
      • 1970-01-01
      • 2013-01-27
      • 2013-08-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多