私はLinqを理解しようとしているだけで、非常に単純に見えることをしようとしていますが、思い通りに出力することはできません。私は何日もの間、さまざまな方法を試してみましたが、うまくいきませんでした。
だから私はクラスEarObsを持っています、それはメンバーを持っています:eventID、icaoId、frm、sta、db。
リストから XML ドキュメントを作成しようとしています。XML ドキュメントを次のようにしたい:
<EarObs EventId = "123456789">
<icao icaoID = "0001">
<frm frm = "01">
<sta sta = "00">
<db>87</db>
<hz>99</hz>
</sta>
<sta station = "01">
<db>79</db>
<hz>99</hz>
</sta>
</frm>
<frm frm = "02">
................
</frm>
</icao>
</EarObs>
そして、これは、複数のフレームまたは複数のコードなどがある場合、同じ順序を維持しながらずっと続きます.
だから、これは私が最近試したことですが、それでも私が望むように出力されません.Obsが繰り返され、どこが間違っているのかわかりません.
string eventGUID = "eventGUID";
List<EarObs> frameObsList = new List<EarObs>();
for (int frm = 2; frm > 0; frm--)
{
for (int sta = 5; sta > 0; sta--)
{
frameObsList.Add(new EarObs("KAPF", eventGUID, frm, sta, 85 + sta, 99 + sta));
cnt++;
}
}
String eventID = obsList.First().EventGUID;
List<EarObs> distinctApts =
obsList
.GroupBy(p => p.IcaoId)
.Select(g => g.First())
.ToList();
XElement xElement = new XElement("EarObs", new XAttribute("eventID", eventID),
from ea in distinctApts
orderby ea.IcaoId
select new XElement("icao", new XAttribute("code", ea.IcaoId),
from eb in obsList
where ea.IcaoId == eb.IcaoId
orderby eb.Frm
select new XElement("frm", new XAttribute("frm", eb.Frm),
from ec in obsList
where eb.Frm == ec.Frm
orderby ec.Sta
select new XElement("sta", new XAttribute("sta", ec.Sta),
new XElement("db", ec.Db),
new XElement("hz", ec.Hz)))));
このコードを使用して、ステーションごとに 1 回フレームを繰り返す xml ドキュメントを取得します。これは正しくありません。これは順番に簡単に実行できるように感じますが、学習しようとしていますが、これは非常に単純なので、Linqで実行できるはずです。リスト内の各要素が XML ドキュメントで一度だけ表されるようにする必要があります。どうすればいいですか?
また、複数の eventId も処理できるように拡張したいと考えていますが、それは XML 構造を正しくすることほど重要ではありません。linq を使用した要素のフィルタリングを含む XML を作成する例をあまり多く見つけることができませんでした。ほとんどの例では、XML を作成する前にリストがすべて構造化されているようです。