2010-08-15 95 views
1

我是LINQ的新手,我已經在這裏待了好幾個小時了。我有一個對象列表,其中一個對象屬性是所選類別的列表。除了對象之外,我還有一個表示類別子集的List,並且我想返回包含至少一個類別的所有對象,如下面的僞代碼所示(不是我的實際代碼)這裏的SQL「in」子句的等價性是什麼?

List<string> subset = cat, dog, mouse 

List<myclass> myclasses = 
    {name:alphie, category:[cat,elephant]},{name:sally, category:[fish]}, {name:bob, category:[dog, mouse]} 

在上面的例子中,我需要返回alphie和bob,因爲它們都至少有一個類屬於我的子集。

到目前爲止唯一的解決方案是獲取兩者的列表,然後使用昂貴的foreach循環來進行比較。我相信LINQ必須提供一種更有效的方法來實現相同的目標?

更多細節(我想不會詳細說明了我的僞代碼就足夠了)

public class RadioProgram { 
    ... 
    private List<string> _category = new List<string>(); 
    public List<string> Category { get { return _category; } set { _category = value; }   } 
    ... 
} 

public class Category { 
    ... 
    private string _categoryName = ""; 
    private List<Category> _subCategories = new List<Category>(); 
    public string CategoryName { get { return _categoryName; } set { _categoryName = value; } } 
    public List<Category> SubCategories { get { return _subCategories; } set { _subCategories = value; } } 
    ... 
} 

我有一個方法,GetCategories(字符串parentCategory),返回所有的孩子CATEGORYNAMES的名單。每個radioProgram.Category(是的,名稱需要重構爲複數)本身就是一個List,可能包含零個或一個或多個categoryNames。我得到了我的主程序radioPrograms列表,我想返回一個子集,其中包含每個包含至少一個與GetCategories中的集合相匹配的至少一個categoryName。

我試圖避免改變應用程序的體系結構(這是一個潛在的解決方案),因爲它意味着很多重構現有功能,我認爲這恰好是解決和理解LINQ的一個很好的練習。你可以使用

回答

3

一件事是

myclasses 
    .Where(o => o.category.Any(c => subset.Contains(c))); 
+0

謝謝,我已經遇到類似的解決方案,但我認爲他們沒有工作,我想這是因爲我需要先莫名其妙地加入這兩個名單。我已經擴展了我的原始帖子,提供了更多細節 – tforster 2010-08-15 21:51:51