#c# #linq #nested
#c# #linq #вложенный
Вопрос:
У меня есть список данных, как показано ниже
OrderID= Order1 |ShipToName= Name1 |ItemNo= 11111 |Quantity= 10
OrderID= Order1 |ShipToName= Name1 |ItemNo= 22222 |Quantity= 6
OrderID= Order1 |ShipToName= Name1 |ItemNo= 33333 |Quantity= 20
OrderID= Order2 |ShipToName= Name2 |ItemNo= 12121 |Quantity= 2
OrderID= Order2 |ShipToName= Name2 |ItemNo= 22222 |Quantity= 5
OrderID= Order3 |ShipToName= Name3 |ItemNo= 33333 |Quantity= 3
и это моя модель
class FlatFileModel
{
FlatFileImports[] flatFileOrders;
}
class FlatFileImports
{
public string OrderID { get; set; }
public string ShipToName { get; set; }
public List<FlatFileImports> LineItems { get; set; }
}
class LineItems
{
public string ItemNo { get; set; }
public int Quantity { get; set; }
}
То, что я хотел бы, чтобы он сделал, это консолидировал по номеру заказа в моем списке flatFileOrders, а затем вложил элементы в него.Что-то вроде этого.
flatFileOrders(3)
Order1
items(3)
itemNo:11111
itemNo:22222
itemNo:33333
Order2
items(2)
itemNo:12121
itemNo:22222
Order3
items(1)
itemNo:33333
Не очень повезло с поиском в Google этой ситуации, поскольку я не совсем уверен, как описать это, кроме консолидированного и вложенного? и я заранее приношу извинения за мое ужасное форматирование.
Комментарии:
1. Вы уверены, что эта строка
public List<FlatFileImports> LineItems { get; set; }
верна?2. Короче говоря, вы пытаетесь создать вложенную структуру из плоских данных — противоположность тому, что предлагают имена классов. Сначала вам нужно загрузить данные в плоскую структуру, особенно если они хранятся в базе данных, так как SQL
GROUP BY
исключает подробные строки. С другой стороны, LINQ to Objects можно использоватьGroupBy
для сбора всех деталей, например, вOrder
и использовать дополнительныеSelect
предложения для создания объектов из собранных деталей, напримерrows.GroupBy(r=>r.OrderId).Select(grp=>new {OrderID=grp.OrderID,Items=grp.Select(d=>new {d.ItemNo,d.Quantity{).ToArray());
3. @Pnagiotis Имя класса является частью того, над чем я работаю для данных, импортированных из файла Excel, а не SQL. Он представлен в виде списка по строкам. Однако я попытаюсь рассмотреть другие примеры вложенных структур stackoverflow из плоских данных. Спасибо.
4. @H.G.Sandhagen Я надеюсь на это. Я все еще новичок в c # и, возможно, я допускаю ошибку в своей модели, поэтому, пожалуйста, дайте мне знать, если есть более чистый способ сделать это.
5. Аналогично тому, что дал мне @PanagiotisKanavos, я использовал > var groupedCustomerList = output. GroupBy(u => u.OrderID) . Выберите(grp => new { groupId = grp.Key, CustomerList = grp. ToList() }) .ToList();
Ответ №1:
Проверьте, пожалуйста, ниже:
var groupedCustomerList = flatModel.flatFileOrders
.GroupBy(u => u.OrderID)
.Select(pair => new
{
GroupID = pair.Key,
Items = pair.Select(p => p.LineItems.Select(li => li.ItemNo))
}).ToList();
Ответ №2:
Да, извините, я немного новичок в stackoverflow, но вот что дало мне нужные результаты.
var ordersList = output.GroupBy(x => x.OrderId)
.Select(grp => new {OrderId = grp.Key, OrderDetail = grp.ToList()})
.ToList();