使用Linq选择列表外的项目

本文关键字:项目 列表 Linq 选择 使用 | 更新日期: 2023-09-27 18:08:28

我有一个列表,像

     {
        "Nutrients": [{
            "vitamin": "vitamin C",
            "potassium": "195mg",
            "sodium": "2mg",
            "cholesterol": "",
            "display_name": "Apple"
        }, {
            "vitamin": "vitamin B",
            "potassium": "176mg",
            "sodium": "2mg",
            "cholesterol": "",
            "display_name": "Grape"
        }],
        "General_name": "Fruits",
        "country_of_origin": "France"

     }

     {
        "Nutrients": [{
            "vitamin": "vitamin B",
            "potassium": "196mg",
            "sodium": "115mg",
            "cholesterol": "123mg",
            "display_name": "Chicken"
        }, {
            "vitamin": "vitamin B",
            "potassium": "360mg",
            "sodium": "53mg",
            "cholesterol": "68mg",
            "display_name": "Chicken"
        }],
        "General_name": "Meat",
        "country_of_origin": "Denmark"
     }

我需要找到胆固醇为空字符串值的项目的General_name。

我尝试使用linq lambda表达式作为

var elements=items.SelectMany(c =>c.Nutrients)
    .Where(a => !string.IsNullOrEmpty(a.cholesterol))
    .ToList();

我的问题是如何从这个条件中得到通用名称

使用Linq选择列表外的项目

var elements = items.Where(x => x.Nutrients.Any(a => !string.IsNullOrEmpty(a.cholesterol)))
   .Select(x => x.GeneralName)
   .ToList();

这将为您提供一个包含所有GeneralName值的列表,其中包含的营养物集合包含胆固醇的非空值。这就是你想要的吗?


编辑:

是否有一种方法,我可以得到这些项目的display_name ?

var elements = items.Where(x => x.Nutrients.Any(a => !string.IsNullOrEmpty(a.Cholesterol)))
    .Select(x => new {x.GeneralName, DisplayNames = x.Nutrients.Where(a => !string.IsNullOrEmpty(a.Cholesterol)).Select(y => y.DisplayName).ToList()})
    .ToList();