3

おそらく理解するのは難しい質問ですが、説明させてください。私はList-objectsChannelを持っていますが、それらはすべてChannelIdプロパティ(int)を持っています。-sのサブセットを含む別のListint)-もあります。SelectedChannelIdsChannelId

2番目に1つと一致する-propertyを持つLINQすべてのChannel-objectsを(?を介して)選択したいと思います。ChannelIdList

言い換えれば、私は次の構造を持っています:

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; }
    // ...
}

そのLINQクエリがどのようになるかについてのアイデアはありますか?または、より効果的な方法はありますか?私はWindowsPhone7、fyi用にコーディングしています。

4

2 に答える 2

8

List.Containsで使用できます:Where

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

HashSet<int>の代わりにを使用した方が効率的であることに注意してList<int>くださいSelectedChannelIds。aに変更すると、パフォーマンスがO(n 2HashSet )からO(n)に向上しますが、リストが常に非常に小さい場合、これは重要な問題ではない可能性があります。

于 2012-04-18T12:49:56.947 に答える
1
SelectedChannels = new List<Channel>(AllChannels.Where(c => SelectedChannelIds.Contains(c.ChannelId)));
于 2012-04-18T12:54:42.720 に答える