首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Linq.js子查询

Linq.js子查询
EN

Stack Overflow用户
提问于 2015-05-07 12:15:27
回答 1查看 3K关注 0票数 2

我正在尝试使用Linq.js从数组中的JSON对象获取元素子集。

我有一个JSON对象数组,其中一个如下所示

代码语言:javascript
复制
{
 "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元素时,我将使用这个查询

代码语言:javascript
复制
var queryResult2 = Enumerable.From(myArray)
        .Where("$.layer == 'V_TRASA' && $.id>460800" )           
        .Select("$")
        .ToArray(); 

但是,我需要对属性属性(即数组)进行一些子查询,例如,当$.layer == 'V_TRASA'和元素包含属性name =='DIMENZE' and invariantStringValue == 80时,我需要查询。

我是新来的Linq,所以这是很难构建这个查询形式我。

谢谢你的帮忙

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-05-07 12:20:08

您可以使用任何函数来确定序列是否包含任何元素。

下面是一个示例:

代码语言:javascript
复制
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(); 

编辑

您可以将原型添加到可枚举中,以便能够在linq表达式中使用它们:

代码语言:javascript
复制
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();
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/30100826

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档