我有以下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; }
}
答案 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")
)));
}