• 时间查询缺少部分数据 mvc 解决方案


    前情提要:

    在c# mvc EF模式下 普通的列表展示页面,采用form提交的,后台视同request对象接收,如果涉及到时间搜索的情况,经常会搞错,现在明确一下怎么做。

    一:Request

        /// <summary>
        /// 发票信息
        /// </summary>
        public class InvoiceInforRequest : Request
        {
         /// <summary> /// 创建开票时间 /// </summary> public DateTime? AddDateStart { get; set; } public DateTime? AddDateEnd { get; set; } }
    public class Request : ModelBase
        {
            public Request()
            {
                PageSize = 10;
            }
    
            public int Top
            {
                set
                {
                    this.PageSize = value;
                    this.PageIndex = 1;
                }
            }
        
            public int PageSize { get; set; }
            public int PageIndex { get; set; }
        }

      

    public class ModelBase
        {
            public ModelBase()
            {
                CreateDate = DateTime.Now;
            }
            
            public virtual int ID { get; set; }
            public virtual DateTime CreateDate { get; set; }
            public virtual int CreateStaffID { get; set; }
            public virtual string CreateStaffName { get; set; }
        }

    这里使用的就是InvoiceInforRequest中的AddDateStart 和AddDateEnd

    二:页面form提交

     <form class="form-inline">
        <div class="form-group">
            <label class="control-label">
                起止日期:</label>
            @Html.TextBox("AddDateStart", ViewData["AddDateStart"], new { @class = "form-control Wdate", @onclick = "WdatePicker()", @style = "100px;" })
            <span style="margin: 0 5px">-</span>
            @Html.TextBox("AddDateEnd", ViewData["AddDateEnd"], new { @class = "form-control Wdate", @onclick = "WdatePicker()", @style = "100px;" })
        </div>
        <button class="btn btn-info">
            <span class="glyphicon glyphicon-search"></span>&nbsp;查询</button>
        </form>

    三:Controller方法

    public ActionResult Index(InvoiceInforRequest request)
            {
                request.CreateDate = new DateTime();
                ViewData.Add("AddDateStart", DateTime.Now.AddMonths(-1).ToCnDataString());
                ViewData.Add("AddDateEnd", DateTime.Now.ToCnDataString());
                //获取发票列表
                //Stopwatch sw = new Stopwatch();
                //sw.Start();
                var invoiceInforList = this.OMService.GetInvoiceInforList(request);
                //sw.Stop();
                //var sss = sw.ElapsedMilliseconds;
                return View(invoiceInforList);
            }

    四:BILL

     /// <summary>
            /// 发票信息列表
            /// </summary>
            public IEnumerable<InvoiceInfor> GetInvoiceInforList(InvoiceInforRequest request)
            {
                using (var dbContext = new OMDbContext())
                {
                    IQueryable<InvoiceInfor> invoiceinforiqueryable = dbContext.InvoiceInfor.Include("TaxControl").Include("Invoice").Include("Invoice.Branch");
                    if (request.Status != (int)EnumInvoiceInforStatus.NotOpen)
                    {
                        if (request.AddDateStart != null)
                        {
                            invoiceinforiqueryable = invoiceinforiqueryable.Where(i => i.BillingDate >= request.AddDateStart);
                        }
                        if (request.AddDateEnd != null)
                        {
                  //结束时间加了23小时和59分钟
                  //linq的语法总是不支持addhours、convert 可能是我版本的问题,mvc 4.0 request.AddDateEnd = Convert.ToDateTime(request.AddDateEnd).AddHours(23).AddMinutes(59); invoiceinforiqueryable = invoiceinforiqueryable.Where(i => i.BillingDate <= request.AddDateEnd); } } return invoiceinforiqueryable.OrderByDescending(i => i.ID).ToPagedList(request.PageIndex, request.PageSize); } }

    五:结论:

      因为这种模式下的提交,时间选择插件最后选择的时间是只到天:“yyyy-MM-dd” ,而不是“yyyy-MM-dd hh:mm:ss”,但是数据库(sql)中的时间格式是datetime

    所以要在时间查询的时候,最后想查的是今天的,但是结束时间应该是今天的最后一分钟或者一秒钟。

      谢谢,看懂了就懂了,看不懂的,也希望能帮到你。

  • 相关阅读:
    游标本次循环,跳过某些语句
    SQL 把结果集的某列连加成一行
    DotNetty 跨平台的网络通信库(转)
    Slickflow.NET 开源工作流引擎基础介绍-.NET Core2.0 版本实现介绍 (转)
    C# Winform应用程序占用内存较大解决方法整理(转)
    (转)vs2010 vs2013等vs中如何统计整个项目的代码行数
    如何将运维的报警做成运营的报警--Java后端架构
    阿里员工内部常用免费工具包 (转)
    ASP.NET中常用的几个李天平开源公共类LTP.Common,Maticsoft.DBUtility,LtpPageControl (转)
    C#与MATLAB混合编程
  • 原文地址:https://www.cnblogs.com/zhaokunbokeyuan256/p/6676776.html
Copyright © 2020-2023  润新知