【问题标题】:Crystal Report - Linq select statement finds nulls in fieldsCrystal Report - Linq select 语句在字段中查找空值
【发布时间】:2020-05-31 14:10:52
【问题描述】:

我正在尝试对 MyReports 文件夹中的自定义水晶报表使用 Linq 查询。但是,水晶报表引擎抱怨空值。

我已经设法将序列号留空,它可能为空,但 DateTime 对我来说更成问题。

我试过了:

InspectionDate = subpat.InspectionDate == null ? "" : subpat.InspectionDate,

但错误是:

Type of conditional expression cannot be determined because there is no implicit conversion between 'string' and 'System.DateTime?' 

如果为 null,我只想要一个空白结果。

我的查询:

        var today = DateTime.Now.Date;
        var tomorrow = today.AddDays(30);


        var dateresult = db.ClinicalINSs.GroupBy(d => d.ClinicalAssetID)
                   .SelectMany(g => g.OrderByDescending(d => d.NextInspectionDate)
                                     .Take(1));

        var ClinicalIDVM = (from s in dateresult.Where(q => q.NextInspectionDate <= tomorrow)
                           join co in db.ClinicalAssets on s.ClinicalAssetID equals co.ClinicalAssetID into AR
                           let subred = AR.OrderByDescending(subredASS => subredASS.ClinicalAssetID).FirstOrDefault()
                           join cp in db.ClinicalPATs on s.ClinicalAssetID equals cp.ClinicalAssetID into AP
                           let subpat = AP.OrderByDescending(SubPATASS => SubPATASS.ClinicalAssetID).FirstOrDefault()
                           orderby s.NextInspectionDate descending


                           select new ClinicalIDVM
                           {
                               ClinicalAssetID = s.ClinicalAssetID,
                               ProductName = subred.ProductName,
                               SerialNo = subred.SerialNo == null ? "" : subred.SerialNo,
                               InspectionDate = subpat.InspectionDate,
                               NextInspectionDate = s.NextInspectionDate

                           }).ToList();

【问题讨论】:

    标签: linq asp.net-mvc-5 crystal-reports entity-framework-6


    【解决方案1】:

    你可以试试这个方法

    InspectionDate = subpat.InspectionDate == null ? (DateTime?)null : subpat.InspectionDate
    

    或者把InspectionDate的类型改成string,就可以了

    InspectionDate = subpat.InspectionDate.HasValue 
    ? subpat.InspectionDate.Value.ToString("yyyy-MM-dd") : "";
    

    更新

     InspectionDate = subpat.InspectionDate == null ? (object) "" : subpat.InspectionDate
    

    【讨论】:

    • 它必须是一个字符串才能设置为空白?但 ToString 缺少 1 个参数
    • 您的意思是第二种解决方案?您遇到了什么错误?
    • 方法 'ToString' 没有重载需要 1 个参数
    • subpat.InspectionDate的类型和样本值是什么样的?
    • 公开日期时间?检查日期{get; set;} 样本数据为:31/12/2019
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-08-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多