2012-04-18 2 views
2

おそらく理解しにくい難しい質問ですが、私に説明させてください。 ListChannel -objectsであり、すべてがChannelIdというプロパティ(int)を持っています。私も別のListint) - SelectedChannelIdsを持っていて、ChannelId-sのサブセットを含んでいます。別のリストの項目と一致するプロパティを持つリストからオブジェクトを選択するにはどうすればよいですか?

私は(LINQ経由?)二Listの1に一致するChannelId -propertyを持っているすべてのChannel -objectsを選択します。言い換えれば

、私は次の構造を持っている:そのLINQクエリがどのように見えるかの

public class Lists 
{ 
    public List<Channel> AllChannels = ChannelController.GetAllChannels(); 
    public List<int> SelectedChannelIds = ChannelController.GetSelectedChannels(); 

    public List<Channel> SelectedChannels; // = ????? 
} 

public class Channel 
{ 
    // ... 
    public int ChannelId { get; set; } 
    // ... 
} 

任意のアイデア?それとももっと効果的な方法がありますか?私はWindows Phone 7、fyiをコーディングしています。

答えて

6

あなたはWhere句でList.Containsを使用することができます:あなたはSelectedChannelIdsためHashSet<int>の代わりList<int>を使用した場合、それは、より効率的であることを

public Lists() 
{ 
    SelectedChannels = AllChannels 
     .Where(channel => SelectedChannelIds.Contains(channel.ChannelId)) 
     .ToList(); 
} 

注意。 HashSetに変更すると、O(n )からO(n)までのパフォーマンスが向上しますが、リストが常に非常に小さい場合は、重大な問題ではない可能性があります。

+0

マーク - すばらしい有益な回答をいただきありがとうございます。私のリストは決して140以上、通常は約40にはなりません。ここでもパフォーマンスは向上しますか? –

1
SelectedChannels = new List<Channel>(AllChannels.Where(c => SelectedChannelIds.Contains(c.ChannelId))); 
関連する問題