我有一个类似的列表
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()));