在列表中使用LINQ

时间:2014-12-20 03:40:32

标签: c# linq

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

我已经在线搜索并阅读了大量的例子,但我无法理解它能够做到我需要的东西。

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

列表中的数据:

 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

这是我使用的代码,我迭代每个Property对象,然后迭代属性集合中的每个项目,搜索名称为"显示"以及" 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");

2 个答案:

答案 0 :(得分:1)

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"));

答案 1 :(得分:0)

var query = 
    from prop_data in Properties
    where prop_data.Attribute("IsDisplayable") == "True"
    select prop_data;

查询变量现在应该包含列表中IsDisplable属性为&#34; True&#34;的所有内容。如果你想查看你发现的每个元素,你可以简单地做一些像

这样的事情
foreach (var item in query)
{
 // item.Attribute("IsDisplayable") = False;
}