我正在尝试为以下示例类创建一个静态索引:
public class Board {
...other assorted fields
List<dynamic> Messages {get; set;}
internal Board() {Messages = new List<dynamic>();}
}
该索引用于过滤具有早于某个日期的消息的板。目的是对今天到期的消息执行“更新”操作,更新它们的内容,并将它们持久化。需要该索引以避免遍历所有客户端的板的所有消息,因为这可能在计算上很昂贵。Messages 是从包含 ExpiryDate 属性的基类继承的消息类型列表。
尝试创建如下索引会导致“表达式树可能不包含动态操作”错误。我知道动态类型不能很好地与 Linq 查询配合使用,因此需要在 RavenDB 中使用 LuceneQueries 而不是 Query()。有没有办法让这个索引与动态属性一起工作?谢谢!
public class ScanBoardMessagesIndex : AbstractIndexCreationTask<Board>
{
public ScanBoardMessagesIndex () {
Map = boards => from board in boards
where board.Messages.Any(msg => ((MessageItem) msg).ExpiryDate <= DateTime.UtcNow.Date)
select board;
}
}
编辑:
我遇到了 raven 序列化问题,因为现有 Board 文档的元数据 clr 类型被设置为不再有效的类命名空间。我正在做一个迁移项目,所以我继续并首先发布了一个补丁来更改现有文档的元数据 clr 类型,然后再将它们迁移到使用基/抽象类作为消息列表而不是类型动态的新数据结构。