从IEnumerable <T>到IEnumerable <Quantity <T >>中选择

ser*_*0ne 3 c# linq

比方说,我有一个像这样的集合:

Apple
Banana
Banana
Apple
Apple
Pear
Banana
Grape
Orange
Pear
Run Code Online (Sandbox Code Playgroud)

如您所见,这些项目中有一些是其中的一部分.我想要的是一个展示物品的集合,以及它的数量.例如,上面的数据将显示如下:

Apple (3)
Banana (3)
Pear (2)
Grape (1)
Orange (1)
Run Code Online (Sandbox Code Playgroud)

我创建了一个班......

public class Quantity<T>
{
    public Quantity(T item, int count)
    {
        Item = item;
        Count = count;
    }

    public T Item { get; private set; }
    public int Count { get; private set; }
}
Run Code Online (Sandbox Code Playgroud)

我假设可以使用某种Select语句来完成LINQ,这种语句可以投射IEnumerable<T>IEnumerable<Quantity<T>>...那就是说,我不是最模糊的如何开始: - | ...有任何想法吗?

Ore*_*aki 5

如果输入是string那么您可以使用以下GroupBy和Select投影.

var result = food.GroupBy(fruit => fruit)
                    .Select(fruit => new Quantity<string>(fruit.Key, fruit.Count()));
Run Code Online (Sandbox Code Playgroud)