我正在使用LINQ to SQL来调用我公司的sprocs。通常它工作得很好,但在某些查询中,如果找不到任何内容,它将抛出一个SqlException“No Records Found”。
我该如何处理这个案子?
以下是我要做的示例电话:
/// <summary>
/// Gets the pending messages.
/// </summary>
/// <param name="historySearchCriteria">The history search criteria.</param>
/// <returns><c>List</c> of pending messages.</returns>
public List<PendingMessage> GetPendingMessages(HistorySearchCriteria historySearchCriteria)
{
using (MessageDataContext db = new MessageDataContext(DatabaseProperties.MessageConnectionString))
{
List<PendingMessage> pendingMessages = new List<PendingMessage>();
pendingMessages.AddRange(db.usp_search_message_pending(historySearchCriteria.AccountId,
historySearchCriteria.TrackingNumber,
historySearchCriteria.StartDateTime,
historySearchCriteria.EndDateTime)
.Select(p => new PendingMessage()
{
Account = p.account,
ActionType = (OrderActionType) Enum.Parse(typeof(OrderActionType), p.action_type.ToString()),
AttemptsRemaining = p.attempts_remaining,
Message = p.message
}));
return pendingMessages;
}
}
处理这样一个事实的最佳方法是,如果没有找到记录,我只想返回一个空列表。
答案 0 :(得分:1)
您可以简单地捕获该异常,并在处理程序中捕获return new List<PendingMessage>;
。
答案 1 :(得分:0)
您可以使用DefaultIfEmpty。
类似的东西:
pendingMessages.AddRange(
db.usp_search_message_pending
(
historySearchCriteria.AccountId,
historySearchCriteria.TrackingNumber,
historySearchCriteria.StartDateTime,
historySearchCriteria.EndDateTime
)
.DefaultIfEmpty()
.Select( /* select clause here */)
);
答案 2 :(得分:0)
“找不到记录”的文字来自何处?
使用导致异常的相同参数从Management Studio执行存储过程。
SSMS是否报告错误?
如果没有,请将C#行分为3个步骤:
调用存储过程
检查!= null并调用Select()
检查!= null并调用AddRange()