Follow

Keep Up to Date with the Most Important News

By pressing the Subscribe button, you confirm that you have read and are agreeing to our Privacy Policy and Terms of Use
Contact

reorder datatable rows with a specific sequence of values

I have a datatable that looks like this:

IDDOC   DOCNAME
1       mydoc1
153     mydoc2
98      mydoc3  
1327    mydoc4
241     mydoc5  

I would like to find a way to reorder the rows in that datatable by basing on a specific sequence of ID

For example, with a sequence like this : 1327,98,1 the expected output would be :

MEDevel.com: Open-source for Healthcare and Education

Collecting and validating open-source software for healthcare, education, enterprise, development, medical imaging, medical records, and digital pathology.

Visit Medevel

IDDOC   DOCNAME
1327    mydoc4
98      mydoc3  
1       mydoc1
153     mydoc2 (not in my sequence so this row comes at the end)
241     mydoc5 (not in my sequence so this row comes at the end)

I was thinking about creating a new empty database and adding the row with the IDDOC coming first, then second, then third in the sequence, then finally all the rows not present in my sequence but i was wondering if something cleaner already existed.
Thank you a lot for your help!

>Solution :

You could use this approach:

dt = dt.AsEnumerable()
    .OrderBy(r => r.Field<int>("IDDOC") == 1327 ? 0 : 1)
    .ThenBy(r => r.Field<int>("IDDOC") == 98 ? 0 : 1)
    .ThenBy(r => r.Field<int>("IDDOC") == 1 ? 0 : 1)
    .CopyToDataTable();

If you want a dynamic list of id’s and the DataTable should be ordered by this sequence:

List<int> docIdSequence = new List<int>{ 1327, 98, 1 };

dt = dt.AsEnumerable()
    .OrderBy(r => { 
        int ix = docIdSequence.IndexOf(r.Field<int>("IDDOC"));
        return ix >= 0 ? ix : int.MaxValue;
    })
    .CopyToDataTable();

Note that CopyToDataTable throws an exception if there are no input DataRows. So you have to check if dt.Rows.Count > 0 before you use above code.

Add a comment

Leave a Reply

Keep Up to Date with the Most Important News

By pressing the Subscribe button, you confirm that you have read and are agreeing to our Privacy Policy and Terms of Use

Discover more from Dev solutions

Subscribe now to keep reading and get access to the full archive.

Continue reading