1

会社で 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;
            }           
        }

レコードが見つからない場合に空のリストを返したいという事実を処理する最良の方法は何ですか?

4

3 に答える 3

1

その例外をreturn new List<PendingMessage>;ハンドラー内で単純にキャッチできます。

于 2010-10-01T17:30:11.563 に答える
0

「レコードが見つかりません」というテキストはどこから来たのですか?

例外が発生したのと同じパラメーターを使用して、Management Studio からストアド プロシージャを実行します。

SSMS はエラーを報告しますか?

そうでない場合は、C# 行を 3 つのステップに分けます。

  • ストアド プロシージャの呼び出し

  • != null をチェックして Select() を呼び出す

  • != null を確認し、AddRange() を呼び出します

于 2010-10-01T18:02:54.057 に答える
0

DefaultIfEmptyを使用できます。

次のようなもの:

pendingMessages.AddRange(
                db.usp_search_message_pending
                   (
                       historySearchCriteria.AccountId,
                       historySearchCriteria.TrackingNumber,
                       historySearchCriteria.StartDateTime,
                       historySearchCriteria.EndDateTime
                   )
          .DefaultIfEmpty()
          .Select( /* select clause here */)
);
于 2010-10-01T17:31:16.000 に答える