CsvHelper — чтение нескольких строк в один список, сгруппированный по столбцу в CSV.C#

Место общения программистов C#
Ответить
Anonymous
 CsvHelper — чтение нескольких строк в один список, сгруппированный по столбцу в CSV.

Сообщение Anonymous »

"Cust1", "CustomerFirstName","CustomerLastName","Street1", "City1","OrderId1","OrderName1"
"Cust1", "CustomerFirstName","CustomerLastName","Street2", "City2","OrderId2","OrderName2"
"Cust2", "CustomerFirstName","CustomerLastName","Street3", "City3","OrderId3","OrderName3"

Я использую CsvHelper для сопоставления с помощью ClassMap этого объекта, содержащего списки адресов и порядка.
public class Customer {
public int CusomerId {get; set;}
public string CustomerFirstName {get; set;}
public string CustomerLastName {get; set;}

public IList Addresses {get; set;}
public IList Orders { get; set;}
}

public class Addresses {
public string Street {get; set;}
public string City {get; set;}
}

public class Order {
public string OrderId {get; set;}
public string OrderName {get; set;}
}

Я хочу преобразовать несколько строк для клиентов в объекты Customer, сгруппированные по CusomerId, где клиенты могут иметь или не иметь различные адреса и заказы.
В на данный момент я могу получить доступ к данным только в том виде, в каком они есть в формате CSV:
using (var reader = new StreamReader())
using (var csv = new CsvReader(reader, cultureInfo.InvariantCulture))
{
csv.Context.RegisterClassMap();
var records = csv.GetRecords();

var groupedContacts = (from customer in customers
group customer by new { contact.CustId } into customers
select new
{
CustId = customers.Key.custId,
ContactInfo = contacts.Select(gcustomers => gCustomers).ToList()
}).ToList();
}

Карта классов:
public class CustomerMap : ClassMap
{
public StudentContactModelMap()
{
Map(m => m.CusomerId).Name("CusomerId");
Map(m => m.CustomerFirstName).Name("CustomerFirstName");
Map(m => m.CustomerLastName).Name("CustomerLastName");

Map(m => m.Addresses).Convert(args =>
{
var AddressList = new List
{
new Address {
Street = args.Row.GetField("Street"),
City = args.Row.GetField("City")
},
};
return list;
});

Map(m => m.Orders).Convert(args =>
{
var orderList = new List
{
new Order {
OrderId = args.Row.GetField("OrderId"),
OrderName = args.Row.GetField("OrderName")
},
};
return list;
});
}
}


Подробнее здесь: https://stackoverflow.com/questions/792 ... umn-on-csv
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C#»