You don't need the ToList(), but if you are working on a dataset that comprises multiple items then you're going to need a loop. In terms of performance your code could be improved by using StringBuilder rather than string concatenation.
System.Text.StringBuilder sb = new System.Text.StringBuilder();
foreach(var res in detailresults.Results.Select(x=>x.Artifact))
{
sb.AppendFormat("{0};{1}", res[fieldname], res[fieldname2]);
}
string results = sb.ToString();