我有以下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中实现此类查询而无需在.ToList()
子句之前调用where
?
答案 0 :(得分:2)
好的,我找到了答案:RavenDb的.In()
扩展方法(参见文档中的&#34; Where + In&#34;部分)。
显然我是从外面思考,而不是从内到外思考:)
这是最终查询:
var rides = _database.Query<RidesByPostcode.IndexEntry, RidesByPostcode>()
.Where(x => !x.IsAccepted && x.PostcodeFrom.In(postcodes))
.OfType<Ride>()
.ToList();