私は実際にこれを試しましたが、それを正常に動作させることはできません。 私は、Linqを使って解析するファイルをたくさん持っていますが、その中には他のものにはないフィールドがあります。ファイル名で知る方法はありません。ここでスコープはtry catchとlinqを使用しています
はファイルに対して実行されるコードです:
var update = from d in document.Descendants("Update")
select new
{
OrderNumber = d.Element("OrderNumber").Value,
StopID = d.Element("StopID").Value,
TransmissionTime = d.Element("TransmissionTime").Value,
EventTime = d.Element("PODTime").Value,
recordCreated = d.Element("EventTime").Value,
EventType = d.Element("EventType").Value,
EventCode = d.Element("EventCode").Value,
POD = d.Element("POD").Value,
Note = d.Element("Note").Value,
CustomerID = d.Element("CustomerID").Value,
OrderID = d.Element("OrderID").Value,
StopRef = d.Element("StopRef").Value,
PieceCount = d.Element("PieceCount").Value,
TotalWeight = d.Element("TotalWeight").Value,
DriverID = d.Element("DriverID").Value
};
さて問題は、それらのいくつかは、要素(「PODTime」)を持っていないということですので、私はdiffernetのLINQクエリを必要としています。私はちょうどtry/catchを実行するつもりだったし、他のものを実行しなければ(私が知っているクールジー)。 しかし、明らかに私がtry/catchで更新を入れるとすぐ、私はもはやそれを外部にアクセスすることはできません。
通常はtry/catchの前に定義しますが、ここでは動作しません。
私が試してみました:
System.Linq.Enumerable update = new System.Linq.Enumerable();
をしかし、それは権利ではありません。誰かが私に正しい方向を指すことができたら、私はそれを感謝します。
ソリューション: 大ハンマーを使用してはレッツと組み合わせるナッジ:
var update = from d in document.Descendants("Update")
let elName = d.Element("PODTime")
select new
{
OrderNumber = d.Element("OrderNumber").Value,
StopID = d.Element("StopID").Value,
TransmissionTime = d.Element("TransmissionTime").Value,
EventTime = (elName != null) ? elName.Value : string.Empty,
をフィールドが存在しない場合に2つの異なる照会がある場合は、2つの別々の匿名オブジェクトを作成してください。フィールドが存在しない場合はnullまたは空の文字列を選択してください。 –
これにはLinqを使用する必要がありますか?静的型を使用するとデシリアライゼーションがはるかに簡単になります – rlee
Collin - 要素が存在しない場合、どうすればよいかわかりませんか?それはおそらく私の問題を解決するだろう。私は前にこの必要性に遭遇していません。 –