I have a list of Message
along with their item length as size
, this.Size = JsonConvert.SerializeObject(Data).Length;
.
public class Data
{
public int Id { get; set; }
public string Name { get; set; }
}
public class Message
{
public Data Data { get; set; }
public int Size { get; set; }
public Message(Data Data)
{
this.Data = Data;
this.Size = JsonConvert.SerializeObject(Data).Length;
}
}
Now I have below data set and I would like to split the list into multiple list and each list should be ONLY 50 bytes (for example).
Note - 50 as an example, my actual size is 1 MB and no individual message is greater than 1MB
I tried below, but how to calculate total size and go group by chunksize,
.GroupBy(x => x.ItemSize / chunkSize)
OR a different way?
var messages = new List<Message>
{
new Message(new Data{ Id=100, Name="N100"}),
new Message(new Data{ Id=1100, Name="N1100"}),
new Message(new Data{ Id=11100, Name="N11100"}),
new Message(new Data{ Id=111100, Name="N111100"}),
new Message(new Data{ Id=1111100, Name="N1111100"})
};
int chunkSize = 50;
var X = messages
.Select(x => new { ItemSize = x.Size, Value = x })
.GroupBy(x => x.ItemSize / chunkSize)
.Select(x => x.Select(v => v.Value).ToList())
.ToList();