Despite the fact that this question sounds like a duplicate, I searched a lot, but did not find a suitable solution.
I have the following classes
public enum ChangeType { Add, Modify, Delete } public enum ChangedObjectType { Project, Customer, Border, Photo } public struct ChangeInfo { public ChangeType typeofChange { get; private set; } public ChangedObjectType objectType { get; private set; } public string objectID { get; private set; } public ChangeInfo(ChangeType changeType, ChangedObjectType changeObj, string objectId):this() { typeofChange = changeType; objectType = changeObj; objectID = objectId; } }
flow:
public class ChangeInfoUploader { static Queue<ChangeInfo> changeInfoQueue = new Queue<ChangeInfo>(); static Thread changeInfoUploaderThread = new Thread(new ThreadStart(ChangeInfoUploaderProc)); static bool isStarted = false; static Project currentProject; public static void Initialize(Project curproject) { currentProject = curproject; isStarted = true; changeInfoUploaderThread.Start(); ResumeData(); } static void ChangeInfoUploaderProc() { while (isStarted) { if (currentProject != null) { ChangeInfo? addToDb = null;
Here is an example of the changeInfoQueue queue data.
<Info TypeofChange="Add" ObjectType="Customer" ObjectId="0005" /> <Info TypeofChange="Add" ObjectType="Customer" ObjectId="0006" /> <Info TypeofChange="Add" ObjectType="Customer" ObjectId="0007" /> <Info TypeofChange="Add" ObjectType="Photo" ObjectId="01a243f5-4894-4d99-8238-9c4cd3" />
My question is:
- I need to sort changeInfoQueue based on ObjectType. How can i do this?
My findings:
- I found OrderBy . Can i use it? If so, how?
In addition to this, I found priorityQueue. What is the best solution for me?
EDIT:
The values โโof this queue are added when the corresponding objects are created. (projects, borders, etc.) and saves it in a local XML file. After that, he needs to write to the database. This is achieved using a stream, and when we save this data, it must be stored in a certain order to avoid foreign key violations. Therefore, this thread is used to call the appropriate methods.
I used orderby as follows:
Queue<ChangeInfo> changeInfoQueue2 = changeInfoQueue.OrderBy(ChangeInfo => ChangeInfo.ObjectType);
then it throws the following exception:
It is not possible to implicitly convert the type 'System.Linq.IOrderedEnumerable' to 'System.Collections.Generic.Queue'. Explicit conversion exists (are you skipping listing?)