private IEnumerable<DynamicPropertyResult> LastEventIdPropertyCalculator(IQueryContext context, Name type, Name subject, Name def, Name target)
{
if(!context.Perspective.Match(Name.SELF_SYMBOL))
yield break;
var key = Name.BuildName(EVT_NAME, type, subject, def, target);
ulong min = ulong.MinValue;
var lastEvents = m_registry.Values.OrderByDescending(e => e.Timestamp).TakeWhile(e =>
{
if (e.Timestamp >= min)
{
min = e.Timestamp;
return true;
}
return false;
});
foreach (var le in lastEvents)
{
IEnumerable<Substitution> set;
if (Unifier.Unify(le.EventName, key, out set))
yield return new DynamicPropertyResult(Name.BuildName(le.Id), new SubstitutionSet(set));
}
}