如何从列表中选择具有与另一个列表中的项匹配的属性的对象?

时间:2012-04-18 12:47:25

标签: linq list windows-phone-7

或许难以理解,但让我解释一下。我有ListChannel个 - 对象,它们都有ChannelId属性(int)。我还有一个不同的Listint) - SelectedChannelIds,其中包含ChannelId - s的子集。

我想选择(通过LINQ?)所有Channel - 具有ChannelId属性的对象 - 属性与第二个List中的属性匹配。

换句话说,我有以下结构:

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查询的概念的任何想法?还是有更有效的方法?我正在编写Windows Phone 7,fyi。

2 个答案:

答案 0 :(得分:7)

您可以在Where子句中使用List.Contains

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

请注意,如果HashSet<int>使用List<int>而不是SelectedChannelIds,效率会更高。更改为HashSet将改善从O(n 2 )到O(n)的性能,但如果您的列表总是非常小,则这可能不是一个重要问题。

答案 1 :(得分:1)

SelectedChannels = new List<Channel>(AllChannels.Where(c => SelectedChannelIds.Contains(c.ChannelId)));