<p>These two methods exhibit repetition:  </p>

<pre><code>public static Expression&lt;Func&lt;Foo, FooEditDto&gt;&gt; EditDtoSelector()
{
    return f =&gt; new FooEditDto
    {
        PropertyA = f.PropertyA,
        PropertyB = f.PropertyB,
        PropertyC = f.PropertyC,
        PropertyD = f.PropertyD,
        PropertyE = f.PropertyE
    };
}

public static Expression&lt;Func&lt;Foo, FooListDto&gt;&gt; ListDtoSelector()
{
    return f =&gt; new FooDto
    {
        PropertyA = f.PropertyA,
        PropertyB = f.PropertyB,
        PropertyC = f.PropertyC
    };
}
</code></pre>

<p>How can I refactor to eliminate this repetition?</p>

<p>UPDATE: Oops, I neglected to mention an important point.  FooEditDto is a subclass of FooDto.</p>

The repetition is in the names, but C# has no idea that PropertyA in one class is connected with PropertyA in another. You have to make the connection explicitly. The way you did it works fine. If you had enough of these, you might consider using reflection to write one method that could do this for any pair of classes.
Do pay attention to the performance implications of whatever method you choose. Reflection by itself is slower. However, you could also use reflection to  emit IL that would, once it's emitted, run just as fast as what you have written. You could also generate an expression tree and convert it to a compiled delegate. These techniques are somewhat complicated, so you have to weigh the trade-offs.