列表对象里面的数组,如何处理?

时间:2015-06-01 17:41:56

标签: c# arrays list

我有这两个类:

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的形式,当订单中有多个产品时,将使用该数组。 {J}字符串创建RawOrderData,其中订单中的每个产品都有自己的对象。我想创建一个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作为输入的方法创建的。

1 个答案:

答案 0 :(得分:1)

听起来你有一个&#34;扁平的&#34;要分组到Order的对象的集合。如果是这样的话,基本的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();