仅在value不为null时如何添加XAttribute

时间:2018-07-11 23:23:15

标签: c# linq

我有以下LINQ代码可以从对象列表中生成XML。当AnalyteName为null或TestName为null时,以下代码将引发错误。如何仅在值不为null的情况下添加XAttribute?

public static void StoreResult(List<LabPostResult> labPostResultList)
{
    var xml = new XElement("LabPostResult", labPostResultList.Select(x => new XElement("row",
                                     new XAttribute("PatientID", x.PatientID),
                                     new XAttribute("AnalyteName", x.AnalyteName),
                                     new XAttribute("TestName", x.Loinc)      
                                           )));
}

课程

public class LabPostResult
{
    public int PatientID { get; set; }
    public string AnalyteName { get; set; }
    public string TestName { get; set; }
}

2 个答案:

答案 0 :(得分:1)

如果该属性为null,则只需传递null:

var xml = new XElement("LabPostResult", labPostResultList.Select(x => new XElement("row",
                   new XAttribute("PatientID", x.PatientID),
                   x.AnalyteName != null ? new XAttribute("AnalyteName", x.AnalyteName) : null,
                   new XAttribute("TestName", x.Loinc)      
                                       )));

这样,将不会为没有AnalyteName的对象创建属性。

答案 1 :(得分:0)

您可以编写扩展方法。这样会更清洁。

    public static XElement ToXElement(this string content, XName name)
    {
        return content == null ? null : new XElement(name, content);
    }

并按如下所示命名。

public static void StoreResult(List<LabPostResult> labPostResultList)
    {
        var xml = new XElement("LabPostResult", 
                                labPostResultList.Select(x => new XElement("row",
                                         new XAttribute("PatientID", x.PatientID),
                                         x.AnalyteName.ToXElement("AnalyteName"),
                                         x.Loinc.ToXElement("TestName")
                                               )));
    }