【问题标题】:Assign/Compare DateTime value from Database with DateTime value from C# in Linq query在 Linq 查询中分配/比较来自数据库的 DateTime 值与来自 C# 的 DateTime 值
【发布时间】:2012-08-28 04:02:35
【问题描述】:

我有以下课程:

public class Top10Date
    {
        [Key]
        public int DateId { get; set; }
        public DateTime Date { get; set; }        
    }

与数据库中的 Top10Date 表相关联。 我正在尝试进行比较并将值分配给控制器类中的 latestDate:

public ActionResult Index(string date, DateTime? latestDate)
    {
        var topDate = db.Top10Dates;

        if (!latestDate.HasValue)
            latestDate = (DateTime?)(topDate.OrderByDescending(d => d.Date).FirstOrDefault());


       if (date.Value == "PreviousDate")
        {
            latestDate = (DateTime?)(topDate.Where(d => d.Date < latestDate.Date).OrderByDescending(d => d.Date).FirstOrDefault());                
        }

        if (date.Value == "NextDate")
        {
            latestDate = (DateTime?)(topDate.Where(d => d.Date > latestDate.Date).OrderBy(d => d.Date).FirstOrDefault());
        }

        .... 

        ViewBag.latestDate = latestDate

        return View();
    }

但它给了我各种各样的错误。我也尝试了其他方法,但都没有效果:

latestDate = topDate.OrderByDescending(d => d.Date).FirstOrDefault();
latestDate.Value = topDate.OrderByDescending(d => d.Date).FirstOrDefault();

latestDate = topDate.Where(d => d.Date > latestDate.Value.Date).OrderBy(d => d.Date).FirstOrDefault();

另外,我如何从数据库中获取 DateId?我试过了,现在可以了。

var dateId = (DateTime?)top10Date.Where(d => d.Date == latestDate.Value.Date).Select(x => x.DateId).FirstOrDefault();

【问题讨论】:

    标签: asp.net-mvc-3 linq c#-4.0


    【解决方案1】:

    试试

    if (!latestDate.HasValue)
        latestDate = (DateTime?)(topDate.OrderByDescending(d => d.Date).Select( x => x.Date).FirstOrDefault());    
    
    if (date == "PreviousDate")
    {
        latestDate = (DateTime?)(topDate.Where(d => d.Date < latestDate.Date).OrderByDescending(d => d.Date).Select(x => x.Date).FirstOrDefault());
    }
    
    if (date == "NextDate")
    {
        latestDate = (DateTime?)(topDate.Where(d => d.Date > latestDate.Date).OrderBy(d => d.Date).Select(x => x.Date).FirstOrDefault());
    }
    

    您对topDate 的查询返回了Top10Date 的实例,该实例无法自动转换为DateTime?。您可以使用 linq 方法 Select() 让您的查询返回不同的内容 - 在这种情况下,Top10Date 中的 Date 属性

    【讨论】:

    • 感谢您的询问,我正在尝试这个!但是我又被困在了一个点上。还有一个地方用到了 latestDate: var topTitles = topsong.Where(s => s.DateId == latestDate).ToList();这也是比较 DateId 是外键的另一个表中的数据库日期。有什么想法可以在这里使用 latestDate 吗?
    • 我尝试使用以下方法获取 DateId: var dateId = (DateTime?)top10Date.Where(d => d.Date == latestDate.Value.Date).Select(x => x.DateId ).FirstOrDefault();但这现在有效吗?
    • +1 来自我的帮助。我会付出更多,但我做不到:)。再次感谢!
    • 不客气。您可能应该阅读linq - 这是.Net 框架的一部分,围绕SelectWhereOrderBy 等的所有魔法都存在。
    【解决方案2】:

    如果其他人遇到类似问题,这是工作代码。我花了一整天的时间才弄清楚这一点。我非常感谢 StanK 向我展示了正确的道路:

    if (!latestDate.HasValue)
                {
                    latestDate = (DateTime?)(topDate.OrderByDescending(d => d.Date).Select(x => x.Date).FirstOrDefault());
                }
    
    
               if ( date == "PreviousDate")
                {
                    latestDate = (DateTime?)(topDate.Where(d => d.Date < latestDate).OrderByDescending(d => d.Date).Select(x => x.Date).FirstOrDefault());                
                }
    
                if (date == "NextDate")
                {
                    latestDate = (DateTime?)(topDate.Where(d => d.Date > latestDate).OrderBy(d => d.Date).Select(x => x.Date).FirstOrDefault());
                }
    

    这里也是获取最新日期的 DateId 的方法:

        int dateId = topDate.Where(d => d.Date == latestDate).Select(x => x.DateId).FirstOrDefault();
    

    【讨论】:

      猜你喜欢
      • 2017-06-27
      • 1970-01-01
      • 2023-03-16
      • 2014-06-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多