linq to sql - 处理类型为 XML 的空列

linq to sql - Handle empty column of type XML

我正在使用 linq 从 2 列包含 XML 的数据库中读取(列类型为 xml) 我的问题是,如果 xml 列为空或 xml 无效。

我收到类似 "Data at the root level is invalid. Line 1, position 1" 或 "missing root element" 的错误。 错误是正确的,因为 xml 是错误的,但是我如何进入循环以便正确处理错误。 现在错误在我启动 foreach 循环后立即发生,因此我无法处理单独 row/item

上的错误
 var approvedList = from a in db.FormApproveds
                       join error in db.ErrorReportingForms
                       on a.FFormFilled_Id equals error.FormFilled_Id
                       join ff in db.FormFilleds on error.FormFilled_Id equals ff.Id
                       where error.ErrorString == "no error" && ff.CreationDate.Year == year && formIds.Contains(ff.FormTemplate_Id) 
                       select new { FormApproved = a, ErrorReportingForm = error, formName = error.FormName, FormFilled = ff };
 foreach (var item in approvedList) {} //error happens here 

这是因为 LINQ 提供程序试图从数据库列启动 XElement,当它无效时会在创建模型对象之前引发异常。要解决此问题,请尝试将 xml 的映射类型设置为 string 而不是 XElement,然后稍后将其转换为 XElement。您可以创建额外的部分 class 并定义解析这些 xml 的方法:

public partial class ErrorReportingForm
{
    public XElement GetInXml() => XElement.Parse(InXml);

    public void SetInXml(XElement e) => InXml = e.ToString();
}

这只是一个例子。您可以尝试定义一些属性。

然后你可以用 try-catch 块包裹它:

try
{
    var inXml = item.ErrorReportingForm.GetInXml();
}
catch (...)
{

}