1

エラーを生成する次のスニペットがあります。これは、ConditionRatingList に値がないことが原因であると想定しています。linqステートメント内でこれを修正する方法について誰か提案がありますか?

ステートメント スニペット:

Dim lst = From a In _context.Assets
          Order By a.AssetIdentifier
          Select New With {
             .AssetID = a.AssetID,
             .ConditionRating = a.ConditionRatingList.OrderByDescending(Function(o) o.DateCompleted).Select(Function(o) o.Rating).FirstOrDefault,
             .ConditionRatingDate = a.ConditionRatingList.OrderByDescending(Function(o) o.DateCompleted).Select(Function(o) o.DateCompleted).FirstOrDefault}

生成されたエラー: 「char データ型を datetime データ型に変換すると、datetime 値が範囲外になりました。」

4

1 に答える 1

1

状態評価日が少なくとも 1 つある場合にのみ取得し、値を 1753 年 1 月 1 日に設定することで、これを解決しました。

.ConditionRatingDate = If(a.ConditionRatingList.Count > 0, a.ConditionRatingList.OrderByDescending(Function(o) o.DateCompleted).Select(Function(o) o.DateCompleted).FirstOrDefault, New Date(1753, 1, 1))

IF() の False 値を NOTHING または Date.MinVlue にすることを許可したとき、生成された SQL を見て、それらを変換していた問題が引き続き発生しました。

 CASE WHEN ([Project8].[C3] > 0) THEN CASE WHEN ([Project8].[C1] IS NULL) THEN convert(datetime, '0001-01-01 00:00:00.000', 121) ELSE [Project8].[C2] END ELSE convert(datetime, '0001-01-01 00:00:00.000', 121) END AS [C15]

また

CASE WHEN ([Project8].[C3] > 0) THEN CASE WHEN ([Project8].[C1] IS NULL) THEN convert(datetime, '0001-01-01 00:00:00.000', 121) ELSE [Project8].[C2] END ELSE '#12:00' END AS [C15]

クエリは正しく実行されるようになりました。1753 年 1 月 1 日が何を意味するかについてユーザーを教育する必要があるだけです。

于 2013-05-24T17:16:29.897 に答える