0

我正在运行以下查询以尝试查找要显示给用户的所有相关通知。但是,Raven 对查询中的某些内容不满意。我已经确定涉及日期的最后两行是好的,但其余的不是(他们中的任何一个似乎都让它不高兴)。我得到的唯一有用的信息是“不支持表达式类型: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();

谁能发现可能导致此异常的原因?或者,如果您认为索引更适合此查询,我需要哪种索引?

任何帮助表示赞赏。

4

1 回答 1

0

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

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

于 2013-10-28T13:35:14.867 回答