링크?js 서브쿼리

질문:

Linq를 사용해 보고 있습니다.js는 배열의 JSON 객체에서 요소 하위 집합을 가져옵니다.
나는 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(); 
그러나 나는 수조의attributes 속성에 대해 하위 조회를 해야 한다. 예를 들어 when$.layer == 'V_TRASA'과 요소는attributename =='DIMENZE' and invariantStringValue == 80를 포함한다.
나는 Linq의 초보이기 때문에 나에게서 이 검색어를 구축하기가 매우 어렵다.
도움말 감사합니다.

답안

모든 함수를 사용하여 서열에 요소가 포함되어 있는지 확인할 수 있습니다.
다음 예는 다음과 같습니다.
var result = Enumerable.From(data)
        .Where(function(i) {
            var foundAttr = Enumerable.From(i.attributes).Any(
                function(j) { 
                    return j.name == 'DIMENZE'; 
            });
            return i.layer == 'V_TRASA' && i.id >460800 && foundAttr; 
        })
        .Select("$")
        .ToArray(); 
편집자
Enumerable에 원형을 추가하여 linq 표현식에서 사용할 수 있도록 할 수 있습니다.
Enumerable.prototype.ContainsName = function(attrName){
    console.log(attrName);
    return Enumerable.From(this).Any('i => i.name == "' + attrName + '"');
}

var result = Enumerable.From(data)
        .Where('i => i.layer == "V_TRASA" && i.id > 460800 && Enumerable.From(i.attributes).ContainsName("DIMENZE")')
        .Select("$")
        .ToArray();