【问题标题】:Get value by filtering a list通过过滤列表获取价值
【发布时间】:2021-11-14 00:36:34
【问题描述】:

我在 DTO 中有一个列表属性,该列表具有从属性返回的以下值:

var myDTO = new MyDTO
{
    DocumentMetaData = new List<Item>
    { 
        new Item { PropertyName = "Prop1", Value = "John" },
        new Item { PropertyName = "Prop2", Value = "Mary" },
        new Item { PropertyName = "Prop3", Value = "Paul" }
    }
}

此 DTO 具有其他属性,但与此问题无关。

所以,我正在寻找一种从属性“Prop2”中获取值“Mary”的方法。我尝试在 Logic App 中执行以下操作,但这不是最佳方法:

body('API_-_GET_-_Document')?['DocumentMetaData']?[1]?['Value']

有没有办法在逻辑应用中按属性“Prop2”进行过滤?

【问题讨论】:

  • 我不知道该语法是什么语言,但它肯定不是 C#(第二段代码,而不是第一段)。请edit您的问题并添加适当的语言标签。此外,根据谁以及为什么“这不是最好的方法”?
  • 对于第二段代码,可以不知道它是什么,所以我编辑了帖子...但是,对于第一段代码,很明显它是 C# 代码
  • 我想如果PropertyName 总是像您的示例中那样唯一,您可以使用Dictionary&lt;string, Item&gt;,然后使用body('API_-_GET_-_Document')?['DocumentMetaData']?['Prop2']?['Value']。这可能是你所追求的吗?
  • PropertyName 的值总是相同的,就像你说的那样是唯一的。所以它总是“Prop1”,“Prop2”和“Prop3”......我特别需要PropertyName“Prop2”的属性Value的值......您提出的解决方案是考虑“Prop2”是Item中的一个属性, 不是。
  • 所以你可以返回一个字典而不是一个列表,这应该可以工作

标签: c# azure azure-logic-apps


【解决方案1】:

您可以使用 Filter Array 操作来实现:

"Filter_array": {
    "inputs": {
        "from": "body('API_-_GET_-_Document')?['DocumentMetaData']",
        "where": "@equals(item()['PropertyName'], 'Prop2')"
    },
    ...
    "type": "Query"
}

那么在您的示例中,您应该只有一个元素,因此您可以获取数组的第一个元素:

first(body('Filter_array'))['Value']

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-03-24
    • 2014-11-12
    • 1970-01-01
    • 2023-03-23
    • 2016-05-11
    • 1970-01-01
    • 2016-11-24
    相关资源
    最近更新 更多