Ejemplo n.º 1
0
        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);
        }