Подсчет слов в коллекции с использованием LINQ

У меня есть объект StringCollection с 5 словами в них. 3 из них являются повторяющимися словами. Я пытаюсь создать запрос LINQ, который будет считать количество уникальных слов в коллекции и выводит их на консоль. Так, например, если у моего StringCollection есть «House», «Car», «House», «Dog», «Cat», тогда он должен выводиться следующим образом:

 Дом -> 2
 Автомобиль -> 1
 Собака -> 1
 Cat -> 1

Любые идеи о том, как создать запрос LINQ для этого?

Попробуйте следующее

var res = from word in col.Cast() group word by word into g select new { Word = g.Key, Count = g.Count() }; 
 var xs = new StringCollection { "House", "Car", "House", "Dog", "Cat" }; foreach (var g in xs.Cast() .GroupBy(x => x, StringComparer.CurrentCultureIgnoreCase)) { Console.WriteLine("{0}: {1}", g.Key, g.Count()); } 

Учитывая, что вы используете StringCollection и хотите игнорировать регистр, вам нужно использовать Enumerable.GroupBy с Enumerable.Cast :

 var results = collection.Cast.GroupBy( i => i, (word, words) => new { Word = word, Count = words.Count() }, StringComparer.CurrentCultureIgnoreCase ); foreach(var wordPair in results) Console.WriteLine("Word: \"{0}\" - Count: {1}", wordPair.Word, wordPair.Count); 

Чтобы создать однострочный результат …

 var stringCollection = new[] { "House", "Car", "house", "Dog", "Cat" }; var result = stringCollection.Cast().GroupBy( k => k, StringComparer.InvariantCultureIgnoreCase) .Select(v => v.Key + " -->" + v.Count()) .Aggregate((l,r)=>l+" " + r); //result = "House -->2 Car -->1 Dog -->1 Cat -->1" 

Чтобы поместить каждое значение в другую строку …

 var stringCollection = new[] { "House", "Car", "house", "Dog", "Cat" }; var result = stringCollection.Cast().GroupBy( k => k, StringComparer.InvariantCultureIgnoreCase); foreach (var value in result) Console.WriteLine("{0} --> {1}", value.Key, value.Count()); 
 foreach(var g in input.GroupBy(i => i.ToLower()).Select(i => new {Word = i.Key, Count = i.Count()}) { Console.WriteLine(string.Format("{0} -> {1}", g.Word, g.Count)); } 

Это должно быть так просто:

 Console.WriteLine(stringCollection.Distinct().Count()); 
 var query = from s in Collection group s by s.Description into g select new {word = g.Key, num = g.Count()};