数组内的列表对象,如何处理

本文关键字:何处理 处理 列表 对象 数组 | 更新日期: 2023-09-27 17:51:21

我有两个类:

public class Order
{
    public int ID { get; set; }
    public int Output { get; set; }
    public int Wharf { get; set; }
    public int PartOf { get; set; }
    public int[] Product { get; set; }
    public int[] Quantity { get; set; }
    public int[] Storage { get; set; }
    public override bool Equals(Order obj)
    {
        // If parameter is null return false.
        if (obj == null)
        {
            return false;
        }
        // Return true if the fields match:
        return (ID == obj.ID);
    }
}
public class RawOrderData
{
    public int ID { get; set; }
    public int Output { get; set; }
    public int Wharf { get; set; }
    public int PartOfID { get; set; }
    public int ProductID { get; set; }
    public int Quantity { get; set; }
}

系统中的每个订单都以Order类的形式存在,当订单中有多个产品时使用该数组。RawOrderData是从一个JSON字符串创建的,其中订单中的每个产品都有自己的对象。我想创建一个List<Order>,其中每个订单在列表中都有自己的对象,所以当订单包含多个产品时,没有几个订单具有相同的订单id。

// raw data is here the JSON string
rawdatalist = serializer.Deserialize<List<RawOrderData>> (rawdata);
// Convert raw objects to List<Order>, list of orders 
List<Order> orders = new List<Order> ();
orders = ConvertRawOrderToList (rawdatalist);
private List<Order> ConvertRawOrderToList(List<RawOrderData> datalist)
{
    List<Order> orders = new List<Order> ();
    foreach (RawOrderData dataobj in datalist) 
    {
        // Check if order exists in list
        if (orders.Contains(new Order () {ID = dataobj.ID}))
        {
            // Order exists, add more products
            // CODE HERE?
        } else {
            // order not existing, add new order to list
            short storage = GetStorageArea(dataobj.ProductID);
            orders.Add (new Order () {ID = dataobj.ID, Output = dataobj.Output, Wharf = dataobj.Wharf, PartOf = dataobj.PartOfID, Product = dataobj.ProductID, Quantity = dataobj.Quantity});
        }
    }
    return orders;
}

我认为ConvertRawOrderToList方法正确吗?问题是我不知道在// CODE HERE?写什么。当列表对象中有数组时,我很困惑。

我也想知道如何访问List<Order>订单中的所有值。

Storage[]的信息是从另一个以产品ID作为输入的方法创建的。

数组内的列表对象,如何处理

听起来您有一个"扁平"的对象集合,您想将其分组到Order s中。如果是这种情况,基本的Linq投影将是最简单的:

var orders = datalist.GroupBy(o => o.ID)
                     .Select(g => new Order {
                           ID       = g.Key,
                           Output   = g.First().Output,
                           Wharf    = g.First().Wharf,
                           PartOf   = g.First().PartOf,
                           Product  = g.Select(o => o.Product).ToArray(),
                           Quantity = g.Select(o => o.Product).ToArray(),  
                         })
                     .ToList();

那么你不需要担心重写Equals(至少不是为了这个目的)。

我在哪里添加添加存储的方法?

由于您的GetStorageArea函数接受单个ProductID,您需要将产品id传递给该函数:

var orders = datalist.GroupBy(o => o.ID)
                     .Select(g => new Order {
                           ID       = g.Key,
                           Output   = g.First().Output,
                           Wharf    = g.First().Wharf,
                           PartOf   = g.First().PartOf,
                           Product  = g.Select(o => o.Product).ToArray(),
                           Quantity = g.Select(o => o.Product).ToArray(),  
                           Storage  = g.Select(o => GetStorageArea(o.Product)).ToArray()
                         })
                     .ToList();