private IEnumerable <XElement> Group(IEnumerable <XElement> rows) { IEnumerable <string> storerkeys = rows.Select(x => x.Element("STORERKEY").Value).Distinct(); foreach (string key in storerkeys) { string duns = getStorerDuns(key); XElement storerGroup = new XElement("VendorShipmentPODReport"); storerGroup.Add(new XAttribute("VendorCode", key)); storerGroup.Add(new XAttribute("VendorDuns", duns)); //string cmcode = rows.Where(x => x.Element("STORERKEY").Value == key).Select(x => x.Element("CONSIGNEEKEY").Value).First(); //string cmduns = rows.Where(x => x.Element("STORERKEY").Value == key).Select(x => x.Element("CMDUNS").Value).First(); //storerGroup.Add(new XAttribute("CMCode", cmcode)); //storerGroup.Add(new XAttribute("CMDuns", cmduns)); XElement fromrole = ConfigHelper.GetRoleElement(_configpath, _fromRole, "fromRole"); XElement tostxrole = ConfigHelper.GetRoleElement(_configpath, _toSTXRole, "toRole"); XElement toe2openrole = ConfigHelper.GetRoleElement(_configpath, _toe2openRole, "toRole"); //XElement hub = ConfigHelper.GetRoleElement(_warehous, "hub"); XElement config = new XElement("config"); config.Add(new XElement("fromRole", fromrole.Elements())); config.Add(new XElement("tostxRole", tostxrole.Elements())); config.Add(new XElement("toe2openRole", toe2openrole.Elements())); //config.Add(new XElement("hub", hub.Elements())); storerGroup.Add(config); //添加所有物流/分ASIC/NOASIC IEnumerable <XElement> vendorreport = rows.Where(x => x.Element("STORERKEY").Value == key).ToArray(); XElement noasic = new XElement("NOASIC"); IEnumerable <OrderHead> orderheads = rows.Where(x => x.Element("STORERKEY").Value == key).Select(x => new OrderHead() { OrderKey = x.Element("ORDERKEY").Value, CMCode = x.Element("CONSIGNEEKEY").Value, DeliveryOrder = x.Element("LOTTABLE02").Value, ExternOrderKey = x.Element("EXTERNORDERKEY").Value }).Distinct(); foreach (OrderHead orderhead in orderheads) { //表头/表体分组 XElement orderel = new XElement("ORDER"); orderel.Add(new XElement("ORDERKEY", orderhead.OrderKey)); //string externorderkey = rows.Where(x => x.Element("STORERKEY").Value == key && x.Element("ORDERKEY").Value == orderkey).Select(x => x.Element("EXTERNORDERKEY").Value).First(); orderel.Add(new XElement("EXTERNORDERKEY", orderhead.ExternOrderKey)); orderel.Add(new XElement("DELIVERYORDER", orderhead.DeliveryOrder)); orderel.Add(new XElement("CMCODE", orderhead.CMCode)); //string comcode = rows.Where(x => x.Element("STORERKEY").Value == key && x.Element("ORDERKEY").Value == orderkey).Select(x => x.Element("COMCODE").Value).First(); //orderel.Add(new XElement("COMCODE", comcode)); //XElement orderdetail = new XElement("ORDERDETAIL"); IEnumerable <XElement> detail = rows.Where(x => x.Element("STORERKEY").Value == key && x.Element("ORDERKEY").Value == orderhead.OrderKey && x.Element("CONSIGNEEKEY").Value == orderhead.CMCode && x.Element("LOTTABLE02").Value == orderhead.DeliveryOrder).ToArray(); //orderdetail.Add(detail); orderel.Add(detail); noasic.Add(orderel); } storerGroup.Add(noasic); yield return(storerGroup); } }