代码之家  ›  专栏  ›  技术社区  ›  ElvisLives

使用linq表达式从对象集合中获取单个数组或字符串列表,而不使用foreach和addrange

  •  1
  • ElvisLives  · 技术社区  · 17 年前
    public class Buddy
        {
            public string[] Sayings;
        }
    
    
    Buddy one = new Buddy();
            one.Sayings = new[] {"cool", "wicked", "awesome"};
    
            Buddy two = new Buddy();
            two.Sayings = new[] {"bad", "lame", "boring"};
    
            Buddy[] buddies = new[] {one, two};
    
            IEnumerable<string[]> something =
                from b in buddies
                select b.Sayings;
    

    因此,基本上我想得到一个数组或列表,其中包含{“酷、坏、棒、坏、跛、无聊”}每个使用linq的好友的格言。

    我尝试了我所能想到的一切,并且开始怀疑它是否可以用一个linq表达式来完成。我可以浏览《老友记》中的每一个好友,然后把这些谚语添加到一个列表中,但我想既然我正在学习linq,我会这样尝试。可能吗?如果可能,如何实现?如果我想在Buddy中获取一些其他对象,那么这也适用于此,在这种情况下,它只是字符串列表。

    4 回复  |  直到 17 年前
        1
  •  4
  •   Jake Pearson    17 年前

    这个怎么样:

    var result2 = buddies.SelectMany(b => b.Sayings);
    
        2
  •  2
  •   Jon Skeet    17 年前

    杰克是对的,这是 什么 SelectMany

    请注意,用于此的查询表达式语法有多个 from 子句-第一个子句之后的每个子句都会向 . 杰克的代码是 相像的

    var result2 = from buddy in buddies
                  from saying in buddy.Sayings
                  select saying;
    

    var result2 = buddies.SelectMany(buddy => buddy.Sayings, 
                                     (buddy, saying) => saying);
    
        3
  •  0
  •   JP Alioto    17 年前

    var buds = new [] { new Buddy { Sayings = new[] {"1","2","3"} },
                        new Buddy { Sayings = new[] {"4","5","6"} },
                        new Buddy { Sayings = new[] {"7","8","9"} } };
    
    
    var res = buds.SelectMany( b => b.Sayings ).ToArray();
    
        4
  •  0
  •   shahkalpesh    17 年前
    
            string[] a = new string[] {"a", "b", "c", "d"};
                string[] b = new string[] {"1", "2", "3"};
    
            var unioned = a.Union(b);
            foreach(string s in unioned)
                Console.WriteLine(s);