【问题标题】:Using DateTime with linq to return 'Events' on a certain date使用带有 linq 的 DateTime 在某个日期返回“事件”
【发布时间】:2011-07-13 16:01:45
【问题描述】:

目前,我的索引正在按日期对事件进行分组,并返回与某个日期相关的事件数量。 我想添加一个浏览链接,它将列出与日期相关的事件。我似乎无法比较我的 linq 查询中的 DateTime,我尝试的所有内容都返回空白。

这是我的模型

namespace AtAClick.Models
{
    public class WhatsOn
    {

    public int ID { get; set; }
    public DateTime? start { get; set; }
    public DateTime? end { get; set; }
    public string Name { get; set; }
    public string Desc { get; set; }
    public string link { get; set; }
    public bool CalenderDisplay { get; set; }
    public DateTime? day { get; set; }
    public int whtscount { get; set; }
    }
}

这是我的索引和浏览控制器

public ViewResult Index(WhatsOn model)
    {
        DateTime myDate = new DateTime(DateTime.Now.Year, DateTime.Now.Month, DateTime.Now.Day);

        var datequery =
                        db.WhatsOns.Where(c => c.start > myDate).OrderByDescending(c => c.start).GroupBy(c => c.start).AsEnumerable().Select(
                        sGroup => new WhatsOn
                        {
                            day = sGroup.Key,
                            whtscount = sGroup.Count()
                        });

        return View(datequery);
    }

    public ViewResult Browse(DateTime? day , int? id)
    {         
        var eventsquery = from c in db.WhatsOns
                          where c.start == day
                           select c;

        return View(eventsquery);
    }

谢谢!

更新:

嘿!搞定了

这是我的新控制器;

    public ViewResult Browse(int? id, DateTime? day, DateTime? start)
    {

        var eventsquery = from c in db.WhatsOns where c.start.Value.Day == day.Value.Day select c;

        return View(eventsquery);


    }

在我看来,在我的操作链接中,有什么诀窍......

 @Html.ActionLink("Browse", "Browse", new { start=item.start, day=item.day })

谢谢你的帮助!!

【问题讨论】:

  • 题外话,为什么不把 myDate 换成 DateTime.Now 呢?
  • 呃,我不知道!我以为我必须每天、每月和每年都这样做,但感谢您的建议,一旦我解决了这个小问题,我就会改变它。

标签: asp.net-mvc-3 linq-to-entities razor ef-code-first


【解决方案1】:

由于 'start' 和 'day' 都是 DateTime 类型,因此它们上的比较器将检查每个位是否有完整的 DateTime 对象。如果您只是想浏览当天,而不是 DateTime 的精确毫秒,请尝试:

c.start.Value.Day == day.Value.Day

对那些可为空的字段进行一些空检查也是一个不错的主意。

【讨论】:

  • 谢谢!我会试试看。
  • 这仍然没有返回任何内容,并且肯定有条目,因为 'whtscount' 属性是两个。有没有我在模型中犯了一个错误?
  • 也许,我不确定为什么一天是日期时间。你能举几个你在“db.WhatsOns”中填充的对象的例子吗?
  • day 按日期对我的条目进行分组,因此它是 DateTimes 的集合。如果我将“day”更改为其他任何我无法将“start”与它进行比较的东西,我已经填充了 db.WhatsOn 中的所有字段,如果这就是你的意思?抱歉,如果不是,我只是从这些东西开始。谢谢!
  • 我想知道您是否可以在原始问题中发布一些示例数据
【解决方案2】:

多年后回顾它有很多错误,但以防万一有人需要 linq 帮助,这里是答案。

public ViewResult Browse(int?id, DateTime?day, DateTime?start) {

    var eventsquery = from c in db.WhatsOns where c.start.Value.Day == day.Value.Day select c;

    return View(eventsquery);


}

在我看来,在我的操作链接中,有什么诀窍......

@Html.ActionLink("Browse", "Browse", new { start=item.start, day=item.day })

【讨论】:

    猜你喜欢
    • 2013-01-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-09-16
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多