c# - How to group a datatable into a single line of data -


let's have following datatable:

equipmentid    serialnum  filename -----------    ---------  -------- 441573         05-335-03  2041165.jpg 441573         05-335-03  2041166.jpg 441573         05-335-03  2041167.jpg 441193         52005088   2536398.jpg 

i want group data in way 441573 single data instance array (or list) of filenames. data in end should this:

{equipmentid: 441573, serialnum: 05-335-03, filename:{2041165.jpg, 2041166.jpg, 2041167.jpg}},  {equipmentid: 441193, serialnum: 52005088, filename:{2536398.jpg}} 

i tried this:

var groupedequipment = e in equipment.asenumerable()                 group e e.field<int>("equipmentid"); 

but brings line each filename. want filenames grouped within equipmentid data shown.

any ideas? question asked wrong way, didn't know how going word it.

once groupby data can use regular linq functions select whatever need. in case example using string.join single string can write console.

the x.select(y => y.filename) line magic comes from. that's line selects items in group , performs operation on them.

class equpimententry {     public int equpimentid { get; set; }     public string serialnumber { get; set; }     public string filename { get; set; } } 
list<equpimententry> entries = new list<equpimententry>() {     new equpimententry { equpimentid = 441573, serialnumber = "05-335-03", filename = "2041165.jpg" },     new equpimententry { equpimentid = 441573, serialnumber = "05-335-03", filename = "2041166.jpg" },     new equpimententry { equpimentid = 441573, serialnumber = "05-335-03", filename = "2041167.jpg" },     new equpimententry { equpimentid = 441193, serialnumber = "52005088", filename = "2536398.jpg" }, };  var groupedequipments = entries     .groupby(x => x.equpimentid) //group id     .select(x => new //make anonymous type data     {         equpimentid = x.key,         //this line take filenames in group , put ", " between them.         //this returns single string         filenamelist = string.join(", ", x.select(y => y.filename))     });  //foreach group, write console (for example) foreach (var group in groupedequipments) {     system.console.writeline(group.equpimentid + ":" + group.filenamelist); } 

this outputs following:

441573:2041165.jpg, 2041166.jpg, 2041167.jpg 441193:2536398.jpg 

note: example groups equipmentid. can add multiple groupby elements if needed , accessible key property in later methods.


Comments