如何实现group by in循环不使用列表.GroupBy方法

本文关键字:循环 列表 方法 GroupBy in by 何实现 实现 group | 更新日期: 2023-09-27 18:02:46

foreach (var type in types)
{
    BaseType existing = myOrderdList.Find(x => x.Id == type.Id);
    if (existing == null)
    {
        myOrderdList.Add(type);
    }
    else
    {
        type.BaseProducts.Add(existing.BaseProducts[0]);
        myOrderdList.Add(type);
    }
}

我有一个BaseType类的列表。每个BaseType都有一个BaseProducts list。

这是我的类:

public class BaseProduct
{
    public int ID { get; set; }
    public string Name { get; set; }
    public double Price { get; set; }
    public string Path { get; set; }
}

这是我的BaseType类:

 public class BaseType
 {
     public int Id { get; set; }
     public string CatalogName { get; set; }
     public List<BaseProduct> BaseProducts { get; set; }
 }

我有一个存储过程,它将返回这样的记录:

Id  Name                ProductName                                Price
7   Digital Cameras 35  Sony DSCWX350 Digital Camera Black          600 
7   Digital Cameras 36  Sony DSCH400 Digital Camera Black           600 
8   Mobiles 15          Samsung Galaxy S4 VE GTI9515 Black 4G LTE   600 
8   Mobiles 16          Samsung Galaxy SIII Neo Dual Sim            600 
8   Mobiles 17          Samsung Galaxy Note 3 Neo Duos Smarthphone  600 

现在我的服务方法将为每一行创建一个basetype的对象。

所以它将返回一个basetype的列表

如何按Name Not using IList对结果进行分组?GroupBy Method ?

So Far I got this:

var types = ReadFromTheServiceMethd();
List<BaseType> myOrderdList = new List<BaseType>();
foreach (var type in types)
{
    BaseType existing = myOrderdList.Find(x => x.Id == type.Id);
    if (existing == null)
    {
        myOrderdList.Add(type);
    }
    else
    {
        type.BaseProducts.Add(existing.BaseProducts[0]);
        myOrderdList.Add(type);
    }
}

如何实现group by in循环不使用列表.GroupBy方法

实现这一点的一种方法是有一个Dictionary<int, BaseType>,其中intBaseTypeId。考虑到这一点,如果您能够在执行存储过程时也为Name字段返回Id,那么您可以这样做:

var products = ReadFromTheServiceMethd();
Dictionary<int, BaseType> baseTypes = new Dictionary<int, BaseType>();
foreach (var product in products)
{
    if (!baseTypes.ContainsKey(product.NameIdFieldHere))
    {
        BaseType newBaseType = new BaseType();
        // set the other properties here...
        baseTypes[product.NameIdFieldHere] = newBaseType;
    }
    baseTypes[product.NameIdFieldHere].BaseProducts.Add(product);
}