范围使用try catch和linq

时间:2016-08-27 19:44:55

标签: c# linq

我真的尝试过这个但是却无法让它发挥作用。 我有一堆文件,我使用Linq解析,但其中一些文件有其他人没有的字段。没有办法知道文件名。

以下是针对该文件运行的代码:

<head>

现在问题是他们中的一些人没有Element(&#34; PODTime&#34;)所以我需要一个不同的linq查询。我只是要尝试/捕获,如果失败则运行另一个(cludgy我知道)。 但很明显,只要我将更新放在try / catch中,我就无法再在它之外访问它。

通常我会在try / catch之前定义它 - 但是我无法在这里工作。

我试过了:

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
                         };

但那不对。如果有人可以指出我正确的方向,我会推荐它。

解决方案: 使用Sledgehammers nudge结合Let:

System.Linq.Enumerable update = new System.Linq.Enumerable();

1 个答案:

答案 0 :(得分:2)

你可以使用新的吗?运营商:

d.Element("CustomerID")?.Value

或者,如果您无法使用最新的C#,您可以编写一个“安全”方法来包含所有来电:

string SafeGetValue(XElement elem)
{
  if (elem == null)
    return null;

  return elem.Value;
}