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 数据类型转换为日期时间数据类型导致日期时间值超出范围。”

4

1 回答 1

1

我通过仅获取条件评级日期(如果至少有一个)并确保将值设置为 1/1/1753 来解决此问题。

.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]

查询现在可以正常运行,我只需要让我的用户了解 1/1/1753 的含义。

于 2013-05-24T17:16:29.897 回答