3

也许很难理解,但让我解释一下。我有一个Listof Channel-objects,它们都有一个ChannelId属性(int)。我还有一个不同的List( int) - SelectedChannelIds,它包含ChannelId-s 的一个子集。

我想选择(通过LINQ?)所有具有与第二个匹配的 -property的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 查询的外观有什么想法吗?或者有没有更有效的方法?我正在为 Windows Phone 7 编写代码,仅供参考。

4

2 回答 2

8

您可以List.ContainsWhere子句中使用:

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

请注意,如果您使用 aHashSet<int>而不是 aList<int>SelectedChannelIds. 更改为 aHashSet会将性能从 O(n 2 ) 提高到 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 回答