唯一对象计数显示系统文本



我有一个类似的列表

List<Product> products = new List<Product>();
Add(new Product { ProductId = "abc", Type = "Normal", Status = "1" });
Add(new Product { ProductId = "def",  Type = "Normal", Status = "2"  });
Add(new Product { ProductId = "ghi",  Type = "VIP" , Status = "1" });
Add(new Product { ProductId = "jkl",  Type = "Group", Status = "1" });
public Product Add(Product item)
{
    if (item == null)
    {
        throw new ArgumentNullException("item");
    }
    products.Add(item);
    return item;
}

我想像一样计数

类型:正常计数:2类型:VIP计数:1类型:组计数:1

来自以下位置的早期帮助唯一对象计数不是以字符串的形式计数,而是以字符的形式计数

我写了代码

var groups = products.GroupBy(x => new { x.Type, x.Status }).Select(g => string.Format("Type: {0} Count: {1}", g.Key, g.Count())); 

当我在上面运行时,我会在下面的组中收到文本

System.Linq.Enumerable+WhereSelectEnumerableIterator 2[System.Linq.IGrouping 2[<>f_AnonymousType0`2[System.String,System.Int32],LocalServer.Product],System.String]##

不知道该怎么解决,也不知道我做错了什么。

这应该可以解决您的问题。

List<Product> products = new List<Product>();
products.Add(new Product { ProductId = "abc", Type = "Normal", Status = "1" });
products.Add(new Product { ProductId = "def",  Type = "Normal", Status = "2"  });
products.Add(new Product { ProductId = "ghi",  Type = "VIP" , Status = "3" });
products.Add(new Product { ProductId = "jkl",  Type = "Group", Status = "1" });
IEnumerable<string> groupedProducts = products.GroupBy(product => product.Type)
                                              .Select(grouping => string.Format("Type: {0} Count: {1}", grouping.Key, grouping.Count())); 
foreach (var groupedProduct in groupedProducts)
{
    Console.WriteLine(groupedProduct);
}

问题是,您试图按多个属性进行分组,因为您只想按Type计数,使用.GroupBy(product => product.Type),然后使用.Select()以任何方式投影结果。

您需要使用组Key属性的Type属性来获取类型名称,因为您正在用一个新的命名类型进行分组。

var groups = products.GroupBy(x => new { x.Type, x.Status }).Select(g => string.Format("Type: {0} Count: {1}", g.Key.Type, g.Count()));

最新更新