score:11

Accepted answer

An alternative solution with using SelectMany (it keeps the duplicates):

var combined = list.Where(c => c.Flag)
                   .SelectMany(c => new[] { c.Present, c.Previous });
Assert.AreEqual(4, combined.Count());

score:0

Does the final ordering of the strings in the list matter? If not, it seems like this would be the clearest way to accomplish this:

var strings = new List<String>();
foreach (var value in list.Where(c => c.Flag))
{
    strings.Add(value.Present);
    strings.Add(value.Previous);
}

Related Query