Summary Output of Pricing Information
It looks to me, that your problem could do with a bit more LINQ and the string concatenation operator.  Specifically the group clause.  Here's one way it could be done:

public static string Method2()
{
    List&lt;int&gt; sample = new List&lt;int&gt; { 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
    1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
    2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2 };

    var data = String.Join(", ", (from int i in sample
                                 group i by i into g
                                 select $"({g.Count()}) {Cache[g.Key.ToString()]}"));

    return data;
}


The efficiency, I think would be better than what you have so far,the Distinct and each Count are extra iterations over the data, but, it would have to be tested to be sure. 

It definitely has the advantage of being more concise. 

Having the string format in one place makes it easier to see what's happening.

If you need the data parsed, instead of one long string, at some point, removing the String.Join part will leave an IEnumerable&lt;string&gt;.