2014-12-20 33 views
0

我想使用LINQ在List中查找一组数据对象。我目前正在迭代集合来找到我需要的东西。在列表中使用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 

下面是我使用的代码,其中我遍历每个属性对象,然后我迭代的集合中的每个项搜索属性的属性名称为“Display”,值为“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"); 

回答

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

我是什么后,对属性集合搜索的方式,而不是每个单独的属性数据对象。我已经更新了我的问题,包括我在LINQ上的尝试。请注意,我正在搜索“属性”对象,而不是遍历每个属性。 –

+0

检查我所做的两个更新。 – dotnetstep

+1

乔恩Skeet有一堆名为edulinq的博客文章,非常适合真正了解LINQ的工作方式。 http://codeblog.jonskeet.uk/category/edulinq/。值得学习所有这些方法,以使它们成为第二性质。 –

0
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; 
}