I think you are exactly expecting like below example.please run this sample and verify it
class Program
{
static void Main(string[] args)
{
var s1 = new List<string> { "Item1", "Item2", "Item1", "Item2" };
var finalResult = new List<FinalResult>();
foreach (var item in s1.Distinct())
{
string item1 = item;
var data = s1.Where(x => x == item1);
if(data.Count()>1)
{
finalResult.Add(new FinalResult{ItemName = item1,Count = data.Count()});
}
}
Console.ReadLine();
}
public class FinalResult
{
public string ItemName { get; set; }
public int Count { get; set; }
}
}
Hope this helps