Replies: 2 comments
-
Try using ClassMap to power your objects. public class FullFile
{
public personId { get; set; }
public FName { get; set; }
public LName { get; set; }
public BookId { get; set; }
public BookName { get; set; }
public PageId { get; set; }
}
public class PersonDetails : ClassMap<FullFile>
{
public PersonDetails()
{
Map(m => m.FName);
Map(m => m.LName);
Map(m => m.personId).Ignore();
Map(m => m.BookId).Ignore();
Map(m => m.BookName).Ignore();
Map(m => m.PageId).Ignore();
}
}
public class Book : ClassMap<FullFile>
{
public Book()
{
Map(m => m.FName);
Map(m => m.LName).Ignore();
Map(m => m.personId);
Map(m => m.BookId).Ignore();
Map(m => m.BookName).Ignore();
Map(m => m.PageId).Ignore();
}
} |
Beta Was this translation helpful? Give feedback.
0 replies
-
I think your best bet is going to be create a void Main()
{
var input = new StringBuilder();
input.AppendLine("PersonId|FName|LName|BookId|BookName|PageId");
input.AppendLine("1|name1|name1|1|book1|1");
input.AppendLine("1|name1|name1|1|book1|2");
input.AppendLine("1|name1|name1|1|book1|3");
input.AppendLine("1|name1|name1|2|book2|1");
input.AppendLine("1|name1|name1|2|book2|2");
input.AppendLine("2|name2|name2|3|book3|1");
input.AppendLine("2|name2|name2|3|book3|2");
input.AppendLine("2|name2|name2|3|book3|3");
var config = new CsvConfiguration(CultureInfo.InvariantCulture)
{
Delimiter = "|"
};
var reader = new StringReader(input.ToString());
var csv = new CsvReader(reader, config);
var persons = csv.GetRecords<FlatPersonDTO>().GroupBy(r => new { r.PersonId, r.FName, r.LName });
var result = new List<PersonDTO>();
foreach (var person in persons)
{
var books = person.GroupBy(p => new { p.BookId, p.BookName });
var personDTO = new PersonDTO
{
Id = person.Key.PersonId,
details = new PersonDetails {
FName = person.Key.FName,
LName = person.Key.LName
},
Books = books.Select(b => new Book
{
Id = b.Key.BookId,
Name = b.Key.BookName,
Pages = b.Select(pg => new Page { Id = pg.PageId }).ToList()
})
.ToList()
};
result.Add(personDTO);
}
result.Dump();
}
// You can define other methods, fields, classes and namespaces here
public class FlatPersonDTO
{
public int PersonId { get; set; }
public string FName { get; set; }
public string LName { get; set; }
public int BookId { get; set; }
public string BookName { get; set; }
public int PageId { get; set; }
}
public class PersonDTO
{
public int Id { get; set; }
public PersonDetails details { get; set; }
public List<Book> Books { get; set; }
}
public class PersonDetails
{
public string FName { get; set; }
public string LName { get; set; }
}
public class Book
{
public int Id { get; set; }
public string Name { get; set; }
public List<Page> Pages { get; set; }
}
public class Page
{
public int Id { get; set; }
} |
Beta Was this translation helpful? Give feedback.
0 replies
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Uh oh!
There was an error while loading. Please reload this page.
Uh oh!
There was an error while loading. Please reload this page.
-
I have CSV like below
personId | FName | LName | BookId | BookName | PageId
1 | name1 | name1 | 1 | book1 | 1
1 | name1 | name1 | 1 | book1 | 2
1 | name1 | name1 | 1 | book1 | 3
1 | name1 | name1 | 2 | book2 | 1
1 | name1 | name1 | 2 | book2 | 2
2 | name2 | name2 | 3 | book3 | 1
2 | name2 | name2 | 3 | book3 | 2
2 | name2 | name2 | 3 | book3 | 3
and the classes as below
How do I parse CSV file using above classes?
Thanks,
AbidAli
Beta Was this translation helpful? Give feedback.
All reactions