2014-12-20 31 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; 
}