7

基本的に、両方の文字列列を選択して、すべてを単一の文字列配列に入れようとしています。現在、2 つの選択を行い、結果を結合する必要があります。大したことではありませんが、見栄えが悪いと思います。1 つの linq ステートメントで同じ目標を達成する方法について何か提案はありますか? これは、私が混乱させるために使用しているテストケースです。

[TestFixture]
  public class test {

    public class Values {
      public string Present { get; set; }
      public string Previous { get; set; }
      public bool Flag { get; set; }
    }

    [Test]
    public void test1() {

      var list = new List<Values> {
        new Values { Present = "present1", Previous = "previous1", Flag = false },
        new Values { Present = "present2", Previous = "previous2", Flag = false },
        new Values { Present = "present3", Previous = "previous3", Flag = true },
        new Values { Present = "present4", Previous = "previous4", Flag = true }
      };


      var r1 = list.Where(c => c.Flag).Select(c => c.Present);
      var r2 = list.Where(c => c.Flag).Select(c => c.Previous);
      var combined = r1.Concat(r2);

      Assert.AreEqual(4, combined.Count());
    }
  }
4

2 に答える 2

11

を使用した代替ソリューションSelectMany(重複を保持します):

var combined = list.Where(c => c.Flag)
                   .SelectMany(c => new[] { c.Present, c.Previous });
Assert.AreEqual(4, combined.Count());
于 2012-08-01T20:38:41.147 に答える
0

リスト内の文字列の最終的な順序は重要ですか? そうでない場合は、これがこれを達成するための最も明確な方法のようです。

var strings = new List<String>();
foreach (var value in list.Where(c => c.Flag))
{
    strings.Add(value.Present);
    strings.Add(value.Previous);
}
于 2012-08-01T20:36:38.097 に答える