この質問は重複しているように聞こえますが、よく検索しましたが、適切な解決策が見つかりませんでした。
私は次のクラスを持っています
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' に暗黙的に変換することはできません。明示的な変換が存在します (キャストがありませんか?)