【问题标题】:Using LINQ to construct a list C# [closed]使用 LINQ 构造列表 C# [关闭]
【发布时间】:2012-09-04 00:21:45
【问题描述】:
 ProductCategory = "A"
 Public Class ProdCat
 {
     public   int productId,
     public string  productCategory
}

我有一个这样的列表

List<ProdCat> ProdCatList = new List<ProdCat>();
ProdCatList.Add( new ProdCat{ productId= 1, productCategory= "A" } );
ProdCatList.Add( new ProdCat{ productId= 2, productCategory= "B" } );
ProdCatList.Add( new ProdCat{ productId= 3, productCategory= "A" } );
ProdCatList.Add( new ProdCat{ productId= 4, productCategory= "C" } );
ProdCatList.Add( new ProdCat{ productId= 5, productCategory = "A" } );
ProdCatList.Add( new ProdCat{ productId = 6, productCategory= "B" } );

我需要拿出一个这样的清单。请注意 ProductCatList 是一个列表,它有两个属性,即 Product Category 是一个字符串,productIds 是 ProductCatList 中的另一个列表

ProductCatList
     ProductCategory = "A"
         productId = 1
         productId = 3
         productId = 5
   ProductCategory = "B"
         productId = 2
         productId = 6
   ProductCategory = "C"
         productId = 4

类实现如下所示

Public Class ProductCatGroup
{
   string      ProductCategory ,
   IList <int> ProdcutId 

}

如何使用 LINQ 实现上述目标


我有两个类如下

 public class product
            {
    
                public int productId { get; set; }
                public string productName { get; set; }
            }
    
            public class ProductCat
            {
    
    
                public int productId { get; set; }
                public string productName { get; set; }
                public int productCatId { get; set; }
                public string ProductCatName { get; set; }
            }
    

名单如下

   List<ProdCat> ProdCatList = new List<ProdCat>();
    ProdCatList.Add( new ProdCat{ productId= 1, productCatId = "1", productName="PA", ProductCatName = "PC1"});
    ProdCatList.Add( new ProdCat{ productId= 2, productCatId = "2", productName="PB", ProductCatName = "PC2"});
    ProdCatList.Add( new ProdCat{ productId= 3, productCatId = "2", productName="PC", ProductCatName = "PC2"});
    ProdCatList.Add( new ProdCat{ productId= 4, productCatId = "1", productName="PD", ProductCatName = "PC1"});
    ProdCatList.Add( new ProdCat{ productId= 5, productCatId = "1", productName="PE", ProductCatName = "PC1"});

我需要想出类似下面的东西

 ProductCatGroup
      productCatId = "1"
      ProductCatName = "PC1"
           productId = 1
           productName = "PA"
           productId = 4
           productName = "PD"
           productId = 5
           productName = "PE"
      productCatId = "2"
      ProductCatName = "PC2"
             productId = 2
             productName = "PB"
             productId = 3
             productName = "PC"

类实现如下

public class ProductCatGroup
{
           public int productCatId { get; set; }
            public int productCatName{ get; set; }
            public IList<Product> ProductList = new List<Product>();

}

我想这已经很清楚了

【问题讨论】:

  • enter code here 是怎么回事?
  • PublicClass 需要小写。
  • 我什至不知道你在这里问什么,为什么需要 LINQ?
  • 你刚刚问了这个问题......
  • 您应该编辑原始问题,而不是发布新问题。

标签: c# linq list group-by using


【解决方案1】:
var grouped = ProductCatList.GroupBy(g => g.ProductCategory )
                 .Select(g => new ProductCatGroup()
                              {
                                  ProductCategory = g.Key,
                                  ProductList = g.Select(p =>  p.productId)
                                                 .ToList()
                              });

【讨论】:

    【解决方案2】:
    var grouped = ProductCatList.GroupBy(g => new{g.productCatId,g.productCatName})
                         .Select(g => new ProductCatGroup()
                                      {
                                          productCatId = g.Key.productCatId,
                                          productCatName = g.Key.productCatName,
                                          ProductList = g.Select(p => new Prroduct()
                                                        {
                                                             productid = p.productId,
                                                             productName = p.productName
                                                         }
                                      });
    

    【讨论】:

    • 这将达到我的目的......非常感谢......它帮助我编写了一个复杂的foreach循环......感谢所有其他人以及试图帮助我的人
    【解决方案3】:

    如果对您有帮助,请查找以下代码

    public class ProdCat
    {
        public int productId;
        public string productCategory;
    }
    
    public class ProductCatGroup
    {
        public string ProductCategory;
        public IList<int> ProdcutId;
    
    }
    public Form1()
    {
        List<ProdCat> ProdCatList = new List<ProdCat>();
        ProdCatList.Add(new ProdCat { productId = 1, productCategory = "A" });
        ProdCatList.Add(new ProdCat { productId = 2, productCategory = "B" });
        ProdCatList.Add(new ProdCat { productId = 3, productCategory = "A" });
        ProdCatList.Add(new ProdCat { productId = 4, productCategory = "C" });
        ProdCatList.Add(new ProdCat { productId = 5, productCategory = "A" });
        ProdCatList.Add(new ProdCat { productId = 6, productCategory = "B" });
    
        var productCatList = from pc in ProdCatList
            group pc by pc.productCategory into pcGroup
            select new ProductCatGroup { ProductCategory = pcGroup.Key, ProdcutId = pcGroup.Select(x => x.productId).ToList() }; 
    }
    

    谢谢。

    【讨论】:

      【解决方案4】:

      您可以像这样初始化ProductCatGroup

              ProductCatGroup g = new ProductCatGroup
              {
                  ProductCategory = "A",
                  ProductID = (new int[] { 1, 3, 5 }).ToList()
              };
      

      您可以使用GroupBy 从示例列表中生成ProductCatGroups 列表,如下所示:

              IEnumerable<ProductCatGroup> groups = ProdCatList
                  .GroupBy(item => item.productCategory)
                  .Select(g => new ProductCatGroup
                  {
                      ProductCategory = g.Key,
                      ProductID = g.Select(x => x.productId).ToList()
                  });
      

      【讨论】:

      • 我想提出一个列表,其中包含 ProductCtergory 和产品 ID 作为列表
      猜你喜欢
      • 2010-09-18
      • 2013-05-16
      • 2014-03-22
      • 2013-08-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多