尽管这个问题听起来像是重复的,但我进行了很多搜索,但找不到合适的解决方案。
我有以下课程
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;
}
}
线 :
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;
// I need to sort changeInfoQueue before dequeue
lock (changeInfoQueue)
{
if (changeInfoQueue.Count != 0)
addToDb = changeInfoQueue.Dequeue();
}
}
}
Logdata();
changeInfoUploaderThread.Abort();
}
}
这是 changeInfoQueue 队列的示例数据。
<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" />
我的问题 :
- 我需要根据 ObjectType 来整理 changeInfoQueue。我怎样才能做到这一点?
我的发现:
- 我找到了OrderBy。可以使用吗?如果是这样,怎么做?
除此之外,我还找到了priorityQueue。对我来说最好的解决方案是什么?
编辑:
此队列的值在创建相关对象时添加。(项目、边界等)并将其保存在本地 XML 文件中。之后,它需要写入数据库。这是通过使用线程来完成的,当我们保存这些数据时,必须特别保存它以避免外键违规。所以这个线程用来调用那些相关的方法。
我使用 orderby 如下:
Queue<ChangeInfo> changeInfoQueue2 = changeInfoQueue.OrderBy(ChangeInfo => ChangeInfo.ObjectType);
然后它抛出以下异常:
无法将类型“System.Linq.IOrderedEnumerable”隐式转换为“System.Collections.Generic.Queue”。存在显式转换(您是否缺少演员表?)