Нет, там нет ничего встроенного, но если у вас есть четко определенный сценарий использования, это то, на что я, конечно, могу взглянуть (я автор).
На данный момент я бы предложил использовать несколько вариантов:
var found = Serializer.DeserializeItems<A>(source, PrefixStyle.Base128,
Serializer.ListItemTag).FirstOrDefault(obj => obj.Foo = "bar");
if(found != null) {...}
, который закорачивается при обнаружении совпадения и быстро освобождает объекты для сбора (возможно, в gen-0). Или для нескольких предметов, возможно:
var list = Serializer.DeserializeItems<A>(source, PrefixStyle.Base128,
Serializer.ListItemTag).Where(obj => obj.Foo = "bar").ToList();
(который снова быстро освобождает несоответствующие элементы)
Чтобы сделать это в случае общего (особенно для более сложных запросов), я не могу придумать разумного способа сделать это без материализации объекта, так что это , вероятно, настолько близко, насколько это возможно, если только не существует очень специфического (и простого) сценария, в котором случается для точного выравнивания с основным хранилищем данных (например, фильтр всегда находится на «теге 1»). *