gyus!假设我有这么简单的LINQ表达式
IEnumerable<StopListMatchViewModel> res =
from rqResult in MatchesList
select new StopListMatchViewModel
(
)
{
MatchDate = DateTime.ParseExact(rqResult.Row["MatchDate"].ToString(), "dd.MM.yyyy HH:m:ss", fmtInfo),
Remark = rqResult.Row["Remark"].ToString()
}
如果无法根据指定的格式掩码解析字符串 - 我得到FormatException。在调试器中,我可以在变量“res”的结果视图中了解它。实时我得到空集合。
在执行LINQ期间可能会出现许多不同异常的例子。我怎么能抓住并处理它们?尝试catch块在这里不起作用,因为异常在我看来不会被提出。
答案 0 :(得分:2)
由于延迟执行,在您评估查询之前不会执行查询,例如通过使用.ToList()
方法。只会在那个时候抛出异常。
要避免此问题,您需要修改查询。如下所示
IEnumerable<StopListMatchViewModel> res =
from rqResult in MatchesList
select new StopListMatchViewModel
{
MatchDate = DateTime.ParseExact(
((rqResult.Row["MatchDate"]==null) ?
rqResult.Row["MatchDate"] : DateTime.MinValue).ToString(), "dd.MM.yyyy HH:m:ss", fmtInfo),
Remark = rqResult.Row["Remark"].ToString()
}
注意:DateTime.MinValue
的值为null时使用rqResult.Row["MatchDate"]
,用于避免null
答案 1 :(得分:0)
使用TryParseExact方法避免不需要的例外 我不明白为什么你不能使用try-catch块?你真的觉得它没有被提出来吗? 您还应该检查数据库中的NULL值:
MatchDate = Convert.IsDBNull (rqResult.Row["MatchDate"]) ?
DateTime.MinValue :
DateTime.ParseExact(rqResult.Row["MatchDate"].ToString(),
"dd.MM.yyyy HH:m:ss",
fmtInfo),
Remark = (string)rqResult.Row["Remark"] ?? String.EmptyString;