public override IEnumerable <XElement> GetAll() { var query = store.GetRecords() .Cast <object[]>() .Select(tri => // Это базовая тройка записи: ид, массив прямых ссылок, массив полей { string id = store.DecodeEntity((int)tri[0]); // Типовая пара среди прямых ссылок (свойство rdf:type закодировано как cod_rdftype object[] pair = ((object[])tri[1]).Cast <object[]>().FirstOrDefault(dup => (int)dup[0] == store.cod_rdftype); XElement xres = new XElement("record", new XAttribute("id", id), pair == null ? null : new XAttribute("type", store.DecodeEntity((int)pair[1])), ((object[])tri[2]).Cast <object[]>().Select(dup => { return(new XElement("field", new XAttribute("prop", store.DecodeEntity((int)dup[0])), (string)dup[1])); }), ((object[])tri[1]).Cast <object[]>().Where(dup => (int)dup[0] != store.cod_rdftype).Select(dup => { return(new XElement("direct", new XAttribute("prop", store.DecodeEntity((int)dup[0])), new XElement("record", new XAttribute("id", store.DecodeEntity((int)dup[1]))))); }), null); return(xres); }); return(query); }