我的目标是执行一个 linq to sql 查询,如果 varbinary(max) 字段不为空,它将从 varbinary(max) 数据库字段返回一个值。在下面的代码中,x.doc 是数据库中的 varbinary(max)。
我的代码的基础是这样的:
var pdfquery = from x in dataContext.Statements
where x.enccc == card && x.stDate == datetime
select x.doc;
if (pdfquery.Count() == 1 )
{
pdffile = pdfquery.FirstOrDefault().ToArray();
}
else
{
//go to a webservice to get pdffile and write it to the db
}
代码块返回空值,因为 if 语句为真。传递两个参数时,数据库中有一个空值。
“pdfquery.Count() == 1”部分在哪里,我试过:
所有这些都给了我一个空值异常。
我错过了什么?如何识别何时返回空值 varbinary(max) 的查询以便我可以采取适当的措施?
更新(2014 年 7 月 17 日):我决定使用 try catch 处理 Null Reference Exception:
try
{
var pdfquery = from x in dataContext.Statements
where x.enccc == card && x.stDate == datetime
select x.doc;
pdffile = pdfquery.SingleOrDefault().ToArray(); //gets the binary data and converts it to a byte array
}
catch(NullReferenceException nux)
{
logger.LogDebug("No Binary Data Exists for Statement, making Request ---- ",nux);
getStatment(unencArray);
getByteArray(statementxml);
writeByteArrayToDb(unencArray, pdffile);
}
我真的不喜欢这样做,因为如果它们被抛出,我宁愿能够捕获其他异常。我将尝试将我的 Byte[] 更改为 ?Byte[] 以希望能正常处理空值。