Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Welcome To Ask or Share your Answers For Others

Categories

0 votes
198 views
in Technique[技术] by (71.8m points)

c# - Custom OrderBy on a List based on a string property value

I have the following class :

public class Document
{
    public string DocumentSection { get; set; }
    public string DocumentName { get; set; }
}

and I would like to order the following list based on the DocumentSection property:

List<Document> documents = new List<Document>();
        documents.Add(new Document { DocumentSection = "Section One", DocumentName = "doc1" });
        documents.Add(new Document { DocumentSection = "Section Two", DocumentName = "doc1123" });
        documents.Add(new Document { DocumentSection = "Section Three", DocumentName = "doc113" });
        documents.Add(new Document { DocumentSection = "Section Four", DocumentName = "doc123" });
        documents.Add(new Document { DocumentSection = "Section Five", DocumentName = "doc11" });

In theory I know that I should implement IComparer to obtain that, but this is where the difficulty comes in, I am not very sure how can I achieve that on a general level ... what is the best solution to achieve this ordering ?

See Question&Answers more detail:os

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome To Ask or Share your Answers For Others

1 Reply

0 votes
by (71.8m points)

Try this:

var orderedList = documents.OrderBy(r => GetOrder(r.DocumentSection));

and the GetOrder() method is:

Public Static int GetOrder(string _arg)
{
    switch (_arg)
    {
        case 'Section One':
            return 1;
        case 'Section Two':
            return 2;
        case 'Section Three':
            return 3;
            .
            .
            .
        default:
            return int.MaxValue;
    }
}

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
OGeek|极客中国-欢迎来到极客的世界,一个免费开放的程序员编程交流平台!开放,进步,分享!让技术改变生活,让极客改变未来! Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Click Here to Ask a Question

...