Я пытаюсь использовать Linq.js для получения подмножества элементов из объекта JSON в массиве.Linq.js sub query
У меня есть массив объектов JSON, что один из них выглядит так
{
"geometryType":2,
"id":461219,
"layer":"V_TRASA",
"attributes":
[
{
"type":"String","name":"DIMENZE","invariantStringValue":"80"
},
{
"type":"String","name":"DRUH","invariantStringValue":"nezadáno"
},
{
"type":"String","name":"ETAPA","invariantStringValue":"nezadáno"
},
{
"type":"Long","name":"ID","invariantStringValue":"461219"
},
{
"type":"String","name":"JMTLAK","invariantStringValue":"nezadáno"
},
{
"type":"String","name":"MATERIAL","invariantStringValue":"litina"
},
{
"type":"String","name":"RC","invariantStringValue":"Vodovodní řad, geod.zaměření"
},
{
"type":"String","name":"ULOZENI","invariantStringValue":"zem"
}
],
"mbr":
{
"xmin":-496466.545,
"ymin":-1155042.47,
"xmax":-496466.11,
"ymax":-1155042.145
},
"lineSymbology":
{
"IRgbColor":-16776961,
"lineWeight":2
},
"points":
[
{"x":-496466.545,"y":-1155042.145},
{"x":-496466.11,"y":-1155042.47}
]
}
каждый объект имеет массив атрибутов свойств. Я могу отдельные элементы из базы массива на его собственность, например, когда мне нужны элементы, которые layer = V_TRASA and ID >460000
я буду использовать этот запрос
var queryResult2 = Enumerable.From(myArray)
.Where("$.layer == 'V_TRASA' && $.id>460800")
.Select("$")
.ToArray();
Но мне нужно сделать некоторый подзапрос атрибутов собственности, которое массив, например, мне нужен запрос когда $.layer == 'V_TRASA'
и элемент содержит атрибут name =='DIMENZE' and invariantStringValue == 80
.
Я новичок в Linq, так что это сложно построить этот запрос из меня.
Спасибо за вашу помощь
Привет Вано! Большое спасибо за ваш быстрый ответ !!! Это очень помогает мне. И покажи мне направление. Но есть ли возможность написать этот запрос без пользовательской функции? Что-то вроде этого? Я пытаюсь создать построитель запросов для пользователя. Что-то вроде: var queryResult2 = Enumerable.From (data) .Where ("$. Layer == 'V_TRASA' && Enumerable.From ($. Attributes) .Contains ($. Name == 'DIMENZE' && $. инвариантStringValue == '80') ") .Выберите (" $ ") .ToArray(); –
Вы хотите расширить linq.js, добавив функции Contains? –
Hi Vano no Я имею в виду переписать код на строчный лямбда-селектор. В одном предложении Where без пользовательской функции ... если это возможно. Чтобы объяснить свою проблему, у меня есть приложение C#, где пользователь имеет настраиваемый конструктор запросов, и пользователь может записать фрагмент кода SQL, чем я создаю inmemory sqlite Db и запустил этот SQL. В javascript этого не может быть. Так что я что-то ищу, но я не уверен, что пользовательская функция работает нормально. Есть ли способ переписать его в одно предложение where без пользовательской функции? –