【问题标题】:How to search between two Dates如何在两个日期之间进行搜索
【发布时间】:2017-03-06 13:17:56
【问题描述】:

我有一个视图页面,其中包含两个外部页面 (@{Html.RenderAction)。 所有 3 个页面都有一个控制器。默认情况下,我从 MSSQL 数据库中获取所有数据并得到结果。现在我需要按日期过滤结果,并在某些日期之间获取结果。

这里是搜索表单的 HTML 代码:

    @using (Html.BeginForm("Reporti", "Reporti", null, FormMethod.Get))
    {
    <table border="0" cellspacing="5" cellpadding="5">
        <tbody>
            <tr>
                <td>Od Datum:</td>
                <td><input type="text" id="datumOD" name="datumOD" class="datumOD"></td>
            </tr>
            <tr>
                <td>Do Datum:</td>
                <td><input type="text" id="max" name="datumDO" class="datumDO"></td>
            </tr>
            <tr>
                <td></td>
                <td><input type="submit" value="Baraj" /></td>
            </tr>
        </tbody>
    </table>
}

页面地址为:h**p://localhost:41777/Reporti/Reporti

点击搜索按钮后我有这个网址

h**p://localhost:41777/Reporti/Reporti?datumOD=01.03.2017&datumDO=02.03.2017

这是控制器的代码

public ActionResult Reporti(string filter, DateTime? datumOD, DateTime? datumDO)
    {
        Session["invoiceFrom"] = datumOD;
        Session["invoiceTo"] = datumDO;


        return View(); 
    }
    public ActionResult reportIZ(DateTime? datumOD, DateTime? datumDO)
    {
        var smetkis = db.smetkis.Include(s => s.firmi);
        return View(smetkis.ToList());
    }

    public ActionResult Report(DateTime? datumOD, DateTime? datumDO)
    {
        var ponudis = db.ponudis.Include(s => s.ponudaDets).Where(x => x.odobreno);
        return View(ponudis.ToList());
    }

我的问题是,如何在 public ActionResult Reporti 中实现代码来过滤日期之间的结果。

【问题讨论】:

  • 一个疯狂的猜测,基于您提供的稀疏信息:var filteredResult = db.Whatever.Where(x =&gt; x.datumOD &gt;= datumOD &amp;&amp; x.datumDO &lt;= datumDO).ToList()
  • 是否可以从两个表中过滤,例如。 ponudis 和 smetkis 合二为一?

标签: c# asp.net asp.net-mvc search controller


【解决方案1】:

只需添加另一个条件:

public ActionResult Reporti(DateTime? datumOD, DateTime? datumDO)
{
    var ponudis = db.ponudis.Include(s => s.ponudaDets).AsQueryable();
    if(datumOD.HasValue) //If we have date - add condition
       ponudis = ponudis.Where(x => x.odobreno >= datumOD);
    if(datumDO.HasValue) //If we have date - add condition
       ponudis = ponudis.Where(x => x.odobreno <= datumDO);
    return View(ponudis.ToList());
}

如果您需要一次从 2 个表中获取数据,您应该使用Union。但是如果你的表有不同的结构,你应该创建单独的类,比如RowViewModel。像这样:

public class RowViewModel
{
   public int Id {get; set;}
   public int DateTime? Odobreno {get; set;}
   //your other properties
}

然后在你的控制器中:

public ActionResult Reporti(DateTime? datumOD, DateTime? datumDO)
{
    var ponudis = db.ponudis.Include(s => s.ponudaDets).AsQueryable();
    var smetkis = db.smetkis.Include(s => s.firmi).AsQueryable();
    if(datumOD.HasValue) //If we have date - add condition
    {
       smetkis = smetkis.Where(x => x.odobreno >= datumOD);
       ponudis = ponudis.Where(x => x.odobreno >= datumOD);
    }

    if(datumDO.HasValue) //If we have date - add condition
    {
       smetkis = smetkis.Where(x => x.odobreno >= datumOD);
       ponudis = ponudis.Where(x => x.odobreno <= datumDO);
    }

    var res = smetkis.Select(x => new RowViewModel 
    { 
       Id = x.ID, 
       Odobreno = x.odobreno
       //other properties if you need        
    }).Union(ponudis.Select(x => new RowViewModel //note Union 
    { 
       Id = x.ID, 
       Odobreno = x.odobreno
       //other properties if you need        
    }));
    return View(res);
}

【讨论】:

  • 是的,这是正确的,但对我来说,问题是我需要在一个地方一起为 ponudis => ToList 执行此操作,同时从 smetkis => ToList 获取数据, 这可以在同一时间在公共 ActionResult Reporti 中进行吗?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2022-06-10
  • 2021-07-06
  • 2011-02-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-07-01
相关资源
最近更新 更多