私は次のモデルを持っています:
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;
}
( beforeとis ) を持ち、かつ ( beforeとis )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....
これは、左辺の式が true と評価された場合、その式が評価されないためだと思われます。これを回避する方法はありますか?