【问题标题】:LINQ / Lambda. Get a value from a list where a condition is true using Select()LINQ/拉姆达。使用 Select() 从条件为真的列表中获取值
【发布时间】:2022-11-14 15:55:36
【问题描述】:

我有一个 JOSN 数组,我需要从该部分的 CustomerId 属性退出的属性中获取 CustomerId 值,我试图在下面循环遍历这些部分并跳过没有 CustomerId 属性的部分

var customerId = "";
    foreach (var section in jsonBuidler?["categories"])
            {
                val = section?["sections"].FirstOrDefault()
                ?["areas"]?.FirstOrDefault()
                ?["components"]?.
                ?["variables"]?.FirstOrDefault()
                ?["properties"]
                ?["CusotmerId"]?.ToString();

                if (val == null)
                    continue;
                else
                {
                    customerId = val;
                    break;
                }

            }

问题是这看起来效率低下(可读性较差),因为我想有一个很好的 .Select 可以用来获得相同的结果而无需 forEach 元素并检查属性是否为 null。

请注意,这不是我遇到的问题,这是有效的,我只想以更易读的方式使用Select 而不是ForEach。谢谢你。

【问题讨论】:

  • 您是在寻找提高效率还是改进可读性? Select() 不会神奇地使事情变得比你的 foreach 语句更有效,因为 Select() 是使用 foreach 实现的。
  • 好问题,可读性,而不是效率

标签: c# linq lambda


【解决方案1】:

我首先将 JSON 解析为对象列表,然后使用 Linq 获取不为空的 CusomerIds 列表。

List<T> arrayItems = jsonBuidler?["categories"].ReadFromJson<List<T>>();
List<string> customerIds = arrayItems.Where(_ => CustomerId != null).Select(_ => _.CustomerId);

【讨论】:

    猜你喜欢
    • 2021-11-02
    • 2019-12-29
    • 2020-05-20
    • 1970-01-01
    • 1970-01-01
    • 2023-03-22
    • 2021-04-19
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多