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

C# 唯一对象计数显示系统文本,c#,linq,list,C#,Linq,List,我有一个如下的清单 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",

我有一个如下的清单

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;
}
当我在上面运行时,我得到如下分组的文本

System.Linq.Enumerable+其中SelectEnumerableInterator
2[System.Linq.iGroup
2[f_uAnonymousType0`2[System.String,System.Int32],LocalServer.Product],System.String]##


不确定如何修复,或者我做错了什么。

您需要使用group 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()));

这会解决你的问题

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);
}
List products=newlist();
添加(新产品{ProductId=“abc”,Type=“Normal”,Status=“1”});
添加(新产品{ProductId=“def”,Type=“Normal”,Status=“2”});
添加(新产品{ProductId=“ghi”,Type=“VIP”,Status=“3”});
products.Add(新产品{ProductId=“jkl”,Type=“Group”,Status=“1”});
IEnumerable groupedProducts=products.GroupBy(product=>product.Type)
.Select(grouping=>string.Format(“Type:{0}Count:{1}”、grouping.Key、grouping.Count());
foreach(groupedProducts中的var groupedProduct)
{
Console.WriteLine(groupedProduct);
}

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

还有另一个问题。我需要得到计数,这很有效,谢谢,另外我还需要像上面的例子计数状态2一样计数状态,它应该显示为1/2。总正常值为2,但其中一个状态为1。您能写一个输出的示例吗?正常值:1/2 VIP:0/3组:0/1
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);
}