如何在LINQ中查询可空日期时间?

3
我正在调用以下查询,以仅显示字段“UploadDate”的最新日期,但我遇到了异常错误,例如:

无法在LINQ to Entities查询中构造实体或复杂类型'cdwModel.database_BD'。","ExceptionType":"System.NotSupportedException","StackTrace":

代码:
public IEnumerable<database_BD> GetDate()
    {
        var data = (from c in db.database_BD
           select new database_BD()
           {
               UploadDate = c.UploadDate

           }).ToList().OrderByDescending(c => c.UploadDate).Take(1);

         return data;
    }

数据库_业务数据模型类:

public partial class database_BD
 {
    public Nullable<System.DateTime> UploadDate { get; set; }
 }

解决方案:

public DateTime? GetDate()
    {
        return data = db.database_BD.Select(d => d.UploadDate)
                     .OrderByDescending(c => c)
                     .FirstOrDefault();
    }

这是 Linq-To-Sql 还是 Entity Framework(它们是两个不同的框架)? - Erik Philips
抱歉造成困惑,数据模型是使用实体框架创建的。非常抱歉。 - user3070072
2个回答

4
如果您只想显示UploadDate的最新日期,则不需要创建新的数据库对象。
在此示例中,数据将是单个日期值,如果没有记录,则为null:
var data = db.database_BD.Select(d => d.UploadDate)
                         .OrderByDescending(c => c)
                         .FirstOrDefault();

如果您需要返回一个database_BD对象,您需要删除更改输出的select语句:
public database_BD GetDate()
{
    var data = db.database_BD.OrderByDescending(c => c.UploadDate)
                             .FirstOrDefault(a => a.UploadDate.HasValue);
     return data;
}

这将在您的表格中提供最新的database_BD对象。


感谢您的反馈。我已经尝试过这种方法,但是在返回数据的代码行上,这段代码给出了“无法隐式转换类型'System.DateTime?'到'System.Collections.Generic.IEnumerable<API_09.database_BD>'”的错误提示。 - user3070072
哦...你之前已经定义了data?如果你直接使用我的代码,就不会出现那个错误。也许你的问题在于你的代码要求一个API_09.database_BD的可枚举对象,但你只想获取日期。 - crthompson
1
如果您可以更改您的方法以仅返回一个对象,请使用我上面发布的内容,否则请使用Erik的答案。 - crthompson
@user3070072,你找到答案了吗? - crthompson
1
非常感谢您的回复。我通过更改交换代码成功使代码工作。谢谢。 - user3070072

4

由于您的字段是可空的,您可能需要:

IEnumerable<database_BD> data = db.database_BD
  .Where(d => d.UpdateDate.HasValue)
  .OrderByDescending(d => d.UpdateDate.Value)
  .Take(1);

根据您在问题中的更改进行更新


你好,很抱歉告诉你,但上面的代码出现了错误 --- 在 return data; 代码行中,无法隐式转换类型 'System.DateTime?' 到 'System.Collections.Generic.IEnumerable<API_09.database_BD>' -- 错误。这个问题是否表明我需要解析 uploadDate 字段名? - user3070072
1
我非常有信心,除非你更改了代码,否则我的代码示例不会抛出异常。我已经明确设置了数据类型,所以除非你的 UpdateDate 不是 Nullable<DateTime>,否则它应该与我发布的完全一样。 - Erik Philips
1
FirstOrDefault 不会返回一个可枚举的 Erik,它会返回这个对象。或者我有什么遗漏吗? - crthompson
这个问题显然含糊不清,我尽力根据问题回答,当然,随着我对更精确问题的了解转变,它也被打破了。 - Erik Philips

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接