【问题标题】:Asp.net MVC 3 Linq DateTimeAsp.net MVC 3 Linq 日期时间
【发布时间】:2011-07-14 10:12:42
【问题描述】:

我需要一个 linq 语句来返回某个日期的所有条目。在我的控制器中有一个处理事件的类的那一刻。我的 Index 类包含一个 linq 语句,它按日期对通风口进行分组,并返回每个日期有多少通风口。我想要一个浏览类,它返回与某个日期相关的事件列表。这是我的模式:

  namespace NewAtAClick.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; }
    }
  }

这是我在 WhatsOn 控制器中的类;

   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);
    }

浏览类中的 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 })

谢谢你的帮助!!

【问题讨论】:

  • 与问题无关,但您的 mydate 声明会更简单,如 DateTime myDate = DateTime.Now.Date;
  • 谢谢,我知道了,我稍后再改。不过还是谢谢。

标签: linq asp.net-mvc-3 datetime razor


【解决方案1】:

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

工作?

【讨论】:

  • 请注意,在比较之前检查空值,因为您的日期时间可以为空
  • @Dan,对不起,您需要先添加 .Value,因为它是一个可以为空的日期时间
  • 对,我把它弹出来了,它仍然什么也没返回。但你是对的。我只需要比较天数,所以我将其保留。感谢您的帮助。你觉得这是我的模特吗?我应该将“事件”(WhatsOn)和“日期”的概念分开吗?
  • @Dan 我不确定为什么这不起作用,除非在 whats on 中没有任何条目的开始日期与日期匹配
  • 我的错,我有 .day 而不是 .date。我现在遇到了另一个错误,但你肯定让我接近了。这是错误...在 LINQ to Entities 中不支持指定的类型成员“日期”。仅支持初始化器、实体成员和实体导航属性...
【解决方案2】:

在比较 DateTime 对象时,请记住,“==”符号也表示秒、毫秒等。

您有任何期望的结果吗?数据库表是否填满了信息?

编辑:日期时间。现在你已经使用了;)

【讨论】:

  • 另外,我认为 db.WhatsOns 是一个错字(额外的 's')
  • 我在表格中找到了结果。我可以更新并输入新结果,我的结果计数器 whtscount 正在工作并返回有两个结果。谢谢你的提示,我会试着让它看起来一天。任何更多的建议都会很棒。谢谢!
  • db.WahtsOns 不是错字。这是我的 NewAtAClick.Models 数据上下文中的“DBSet”名称。它首先在代码中表示一个表
  • 啊,是的,忘了那个自动复数的东西!嘿嘿好吧!您可能还想看看 DateTime.Compare(param1, param2) 或只是 param1.Equals(param2) 方法。
  • 谢谢 Peanutbag,这是一个很好的观点。我会读一读并尝试一下。我对这一切都很陌生,因此非常感谢您的帮助!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-06-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多