RavenDB接收不支持异常:使用查询时不支持表达式类型

时间:2013-10-28 12:36:57

标签: linq ravendb

我正在运行以下查询以尝试查找要显示给用户的所有相关通知。但是,Raven对查询中某处的某些内容并不满意。我已经确定涉及日期的最后2行很好,但其余的不是(其中任何一行似乎都不高兴)。我得到的唯一有用的信息是它是“不支持表达式类型:System.Linq.Expressions.TypedParameterExpression”。这些看起来都不是LINQ的异常类型。

值得一提的是,action是枚举的一个实例,n.Actions是它们的列表。与user.HiddenNotificationTypes和n.Type类似。我不确定这是不是扔它的东西。

 /* Find all notifications that:
 * Have no actions associated or the action that the user has performed
 * There are no targets or the user is one of the targets
 * The user is not one of the users that has seen this notification
 * The notification type isn't one that the user has opted out of
 * The current DateTime is after the notification's start time
 * The current DateTime is before the expiry date of the notification
 * */
 notifications = session.Query<Notification>()
    .Where(n => (n.Actions == null || action.In(n.Actions))
        && (n.Targets.Count == 0 || user.Id.In(n.Targets))
        && (!user.Id.In(n.UsersSeen))
        && (!user.HiddenNotificationTypes.Contains(n.Type))
        && (n.StartDate == DateTime.MinValue || n.StartDate > DateTime.Now)
        && (n.ExpireDate == DateTime.MinValue || n.ExpireDate < DateTime.Now))
    .ToList();

有人能发现可能导致此异常的原因吗?或者,如果您认为索引对此查询更有效,那么我需要什么样的索引?

任何帮助表示感谢。

1 个答案:

答案 0 :(得分:0)

这一个:user.HiddenNotificationTypes.Contains(n.Type)

您还应该避免在查询中使用DateTime.Now,它会阻止查询被缓存。