在列表中使用 LINQ

本文关键字:LINQ 列表 | 更新日期: 2023-09-27 18:34:50

我想使用 LINQ 在列表中查找一组数据对象。我目前正在迭代集合以找到我需要的东西。

我在网上搜索并阅读了很多例子,但我没有足够的意义来做我需要的。

我要搜索的数据对象在我的代码中称为"属性"。属性具有"属性"的泛型列表。属性具有字符串的泛型列表,该列表包含两个项目,即名称和值。

列表中的数据:

 Property_Data
 {
    Attribute {name="Color" value=""}
    Attribute {name="Size" value=""}
    Attribute {name="Width" value=""}
    Attribute {name="Display" value=""}
 }

具有填充属性的属性示例

My_Property
    Color = black
    Size = 12
    Width = 2
    Display = True

这是我使用的代码,其中我迭代每个属性对象,然后迭代属性集合中的每个项目,搜索名称为"显示"且值为"True"的属性。

  foreach (IPropertyData prop_data in Properties)
  {
    if (prop_data.Attributes.Find(a => a.Name == "Display").Value == "True")
    {
       // do something here
    }                                    
  }

我想学习的是如何使用 LINQ 搜索属性数据对象的集合,这样我就不必迭代每个属性,然后迭代属性的属性。

这是我的尝试:

  IEnumerable<IPropertyData> prop_datas = Properties
       .Where(p => p.Attributes.Where(a => a.Name == "isDisplayable" &&  a.Value == "True");

在列表中使用 LINQ

if(prop_data.Attributes.Any(cc=>cc.Name == "Display" && cc.Value == "True"))
{
  // Do your work
}

如果您考虑完整收集,那么

Properties.ForEach(item=> {
       if(item.Attributes.Any(cc=>cc.Name == "Display" && cc.Value == "True"))
       {
          // Do your work.
       }  
});

问题更新后

IEnumerable<IPropertyData> prop_datas = Properties
       .Where(p => p.Attributes.Any(cc=>cc.Name == "Display" && cc.Value == "True"));
var query = 
    from prop_data in Properties
    where prop_data.Attribute("IsDisplayable") == "True"
    select prop_data;

查询变量现在应包含列表中其 IsDisplable 属性为"True"的所有内容。如果你想回顾你发现的每个元素,你可以简单地做一些类似的事情

foreach (var item in query)
{
 // item.Attribute("IsDisplayable") = False;
}