我有以下模型:
public class Clip {
public Guid ClipId { get; set; }
public IList<StateChange> StateChanges { get; set; }
}
public class StateChange {
public string OldState { get; set; }
public string NewState { get; set; }
public DateTime ChangedAt { get; set; }
}
这就是查询乌鸦的方式:
var now = DateTime.UtcNow;
var since = now.AddSeconds(60);
string state = "some state of interest";
using (var session = docStore.OpenSession()) {
RavenQueryStatistics stats;
session.Query<Clip>()
.Statistics(out stats)
.Where(
p => p.StateChanges.Any(a => (since > a.ChangedAt && a.NewState == state))
&& !p.StateChanges.Any(a => (a.OldState == state && now > a.ChangedAt)))
.ToArray();
return stats.TotalResults;
}
我想获取所有Clip
具有(StateChange.CreatedAt
之前since
和NewState
是"some state of interest"
)且没有(StateChange.CreatedAt
之前now
和OldState
是)的记录的计数"some state of interest"
。
虽然上面使用的谓词适用于 linq to object,但它似乎不适用于 linq to raven(即不返回预期结果)。我怀疑这是因为&& !.p.StateChanges.Any....
如果左侧的表达式评估为真,则永远不会评估该表达式。有没有办法解决这个问题?