在选择查询内部选择(列表)

时间:2017-09-03 14:17:59

标签: c# linq select

我有这段代码:

HashSet<string> MyHash = new HashSet<String>();

foreach (MyType a in myCollection)
{
    foreach (string b in a.mylist)
    {
        MyHash.Add(b);
    }
}

我试图让它更容易阅读,但它不起作用:

myCollection.MyType.select(x => x.mylist.select(y => MyHash.add(y)));

有什么建议吗?

2 个答案:

答案 0 :(得分:4)

Select返回项目集合,而不是修改项目。因此,您必须将其返回值分配给变量或成员,或将其传递给方法。此外,您需要展平结果以将内部列表的成员添加到哈希集中。

因此,当您想要将结果添加到列表中时,请使用HashSet.UnionWith

myHash.UnionWith(myCollection.SelectMany(x => x.MyList));

另外,你也可以使用接受一组项目的HashSet构造函数:

var myHash = new HashSet<string>(...);

然而,恕我直言,这比使用一些基于foreach的方法更具可读性。

答案 1 :(得分:0)

以下是我将如何做,分离查询定义和状态修改。

fill

如果你想出于某种原因对其进行单行处理:

IEnumerable<string> items = myCollection.SelectMany(a => a.myList);

foreach(string b in items)
{
  MyHash.Add(b);
}