1
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を学んでいるので、この方法で試してみることにしました。それは可能ですか?これは、バディ内の他のオブジェクトを取得したい場合にも適用できます。この場合は、単なる文字列のリストです。

4

4 に答える 4

4

これはどう:

var result2 = buddies.SelectMany(b => b.Sayings);
于 2009-06-17T20:29:34.053 に答える
2

Jakers の言うとおりです。これは、最も単純な形で、まさにその通りです。SelectMany代替のオーバーロードを使用すると、射影に「ソース」アイテムを含めるなど、さまざまな結果を得ることができます。

このクエリ式の構文には、複数のfrom句が必要であることに注意してください。最初の句の後の各句は、 への別の呼び出しを追加しSelectManyます。Jakers のコードは次のようになります。

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

ただし、ドット表記バージョンの方が効率的です。投影は 1 回だけです。上記のコードは次のようにコンパイルされます。

var result2 = buddies.SelectMany(buddy => buddy.Sayings, 
                                 (buddy, saying) => saying);
于 2009-06-17T20:37:19.217 に答える
0

        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);
于 2009-06-17T20:37:05.580 に答える
0

これはうまくいくはずです...

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();
于 2009-06-17T20:36:12.167 に答える