我正在使用linq从具有2列的包含XML(列类型为xml)的数据库中读取 我的问题是,如果xml列为空或xml无效。
我收到诸如“在根级别的数据无效。第1行,位置1”或“缺少根元素”之类的错误。 错误是正确的,因为xml不好,但是我如何进入循环,以便我可以正确处理错误。 现在,错误会在我开始foreach循环后立即发生,因此我无法在单独的行/项目上处理错误
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
答案 0 :(得分:1)
这是因为LINQ提供程序尝试从db列初始化XElement
,并且在无效时会在创建模型对象之前引发异常。要解决此问题,请尝试将xml的映射类型设置为string
而不是XElement
,然后再将其转换为XElement
。您可以创建其他的部分类并定义用于解析这些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 (...)
{
}