或许难以理解,但让我解释一下。我有List
个Channel
个 - 对象,它们都有ChannelId
属性(int
)。我还有一个不同的List
(int
) - 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。
答案 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)));