Building XML elements from a list using LINQ and foreach I wrote the following code:

var xmlArray = from m in (from row in data select row.Mitarbeiter).Distinct()
               select "&lt;Value Type='Text'&gt;" + m + "&lt;/Value&gt;";
var xml = string.Join("",xmlArray);


Then I noticed there are two iteration (two from) and also the Distinct() and I rewrote it using a foreach:

var mitarbeiter = new List&lt;string&gt;();
var xmlArray = new List&lt;string&gt;();
foreach(var row in data)
{
    if (!mitarbeiter.Contains(row.Mitarbeiter)){
        mitarbeiter.Add(row.Mitarbeiter);
        xmlArray.Add("&lt;Value Type='Text'&gt;" + row.Mitarbeiter + "&lt;/Value&gt;");
    }
}
var xml = string.Join("",xmlArray);


Ma opinion is that the first example is cleaner...but what about efficiency/performance?
The best way to discuss performance is by measuring it. I suggest you use BenchmarkDotNet and never roll your own solution.

Onto your question: it is safe to assume that LINQ will in most cases be slower than the iterative approach. Not only does it allocate more (for example through lambdas) but it's also more expensive in runtime because of interface dispatching and other aspects. 

There is obviously a balance to be struck between readability and performance -- if you have no performance issues then LINQ might very well be the best option although I would argue that in this case the iterative approach is very readable as well (if not more).

Something you can consider: use a HashSet&lt;T&gt; instead of a List&lt;T&gt; if your usecase allows it. Performing Contains() is O(n) for a list but O(1) for a Set.