我正在运行以下查询以尝试查找要显示给用户的所有相关通知。但是,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();
有人能发现可能导致此异常的原因吗?或者,如果您认为索引对此查询更有效,那么我需要什么样的索引?
任何帮助表示感谢。
答案 0 :(得分:0)
这一个:user.HiddenNotificationTypes.Contains(n.Type)
您还应该避免在查询中使用DateTime.Now,它会阻止查询被缓存。